[英]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.