繁体   English   中英

Java DataInputStream 读取操作抛出异常

[英]Java DataInputStream read operations throwing Exceptions

我正在尝试熟悉 Java IO 类,因此我编写了以下代码:

public static void main(String[] args)throws IOException {
    FileOutputStream fos = new FileOutputStream("fileIO.txt");
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    DataOutputStream dos = new DataOutputStream(bos);

    //fos.write(9999);
    //bos.write(9999);
    dos.writeInt(9999);
    dos.writeBytes("中文字(Chinese)\n");
    dos.writeChars("中文字(Chinese)\n");
    dos.flush();

    FileInputStream fis = new FileInputStream("fileIO.txt");
    BufferedInputStream bis = new BufferedInputStream(fis);
    DataInputStream dis = new DataInputStream(bis);

    System.out.println(dis.readInt());
    System.out.println(dis.readUTF());
}

不幸的是,我得到了这个:

9999
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:180)
at java.io.DataInputStream.readUTF(DataInputStream.java:592)
at java.io.DataInputStream.readUTF(DataInputStream.java:547)
at IO.main(IO.java:34)

谁能指出为什么? 谢谢。

代替

dos.writeBytes("中文字(Chinese)\n");
dos.writeChars("中文字(Chinese)\n");

你需要

dos.writeUTF("中文字(Chinese)\n");

执行 readUTF 时,前两个字节用于长度。 这意味着如果您在那里有随机字节(不是来自 writeUTF),您将尝试读取很长的字符串,并且由于没有足够的数据,您将收到 EOFException。

我认为此链接会有所帮助。 抛出异常(来自oracle docs )-

如果此输入流在读取所有字节之前到达末尾。

您只能使用readUTF()读取使用writeUTF()编写的项目。

这对于任何 XXX 的readXXX()writeXXX()通常都是正确的(除非您想读取 int 或某些此类的字节并且您知道自己在做什么)。

您的文件中的整数后没有 UTF 字符。 当您尝试读取 UTF 时,有文件结尾,因此您有例外。

在您阅读和手动检查您的文件之前尝试在调试模式停止,然后您有什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM