为什么 readLong 方法会导致 EOFException?

why does readLong method cause EOFException?

提问人:mramz 提问时间:7/25/2021 更新时间:7/25/2021 访问量:99

问:

当我执行以下代码时,它在第 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();
    }
Java IO 二进制 EOF

评论

0赞 Gaël J 7/25/2021
你调试了这段代码吗?你发现了什么?提示:在读取文件之前放一个断点,用文本编辑器打开文件,你看到了什么?
0赞 mramz 7/25/2021
我不知道如何调试,也不明白发生了什么,但这是图片:pasteboard.co/KcGzZDY.png

答:

0赞 mss 7/25/2021 #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();
    }

评论

0赞 Gaël J 7/25/2021
关闭不是必需的,但刷新数据以确保它们被写入磁盘是必需的。