【问题标题】:why does readLong method cause EOFException?为什么 readLong 方法会导致 EOFException?
【发布时间】:2021-07-24 17:32:14
【问题描述】:

当我执行以下代码时,它会在第 10 行抛出 eof 异常。它似乎无法执行 readLong 方法。我该怎么办?

try (DataOutputStream dataOutputStream=new DataOutputStream(new BufferedOutputStream(new 
FileOutputStream("1.dat")));
         DataInputStream dataInputStream=new DataInputStream(new BufferedInputStream(new 
FileInputStream("C:\\Users\\Asus\\IdeaProjects\\Example" +
                 "\\1.dat")))){
        dataOutputStream.writeLong(123);
        dataOutputStream.writeChar('D');
        dataOutputStream.writeUTF("Hello!");

        System.out.println(dataInputStream.readLong());//exception occurse here
        System.out.println(dataInputStream.readChar());
        System.out.println(dataInputStream.readUTF());
    }catch (IOException e){
        e.printStackTrace();
    }

【问题讨论】:

  • 你调试过这段代码吗?你找到了什么?提示:读取文件前下断点,用文本编辑器打开文件,你看到了什么?
  • 我不知道如何调试,我不明白发生了什么,但这是图片:pasteboard.co/KcGzZDY.png

标签: java io binary eof


【解决方案1】:

在写入文件之前您正在读取文件的问题。当您阅读文件时,它是空的。在流关闭之前,数据也不会保存到文件中。所以如果你想读取写入的值,你应该关闭输入流然后读取文件。 还要注意输出流文件路径与输入流不同

这里是一个例子:

  try ( DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("1.dat")))) {
        dataOutputStream.writeLong(123);
        dataOutputStream.writeChar('D');
        dataOutputStream.writeUTF("Hello!");
        dataOutputStream.close();
        DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(new FileInputStream("1.dat")));
        System.out.println(dataInputStream.readLong());
        System.out.println(dataInputStream.readChar());
        System.out.println(dataInputStream.readUTF());
    } catch (IOException e) {
        e.printStackTrace();
    }

【讨论】:

  • 不需要关闭,但是刷新数据以确保它们写入磁盘是必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 2018-03-30
  • 2019-09-12
  • 1970-01-01
  • 2016-10-25
  • 2023-03-02
相关资源
最近更新 更多