何时会在JAVA的流中发生EOFException

jbu*_*jbu 16 java input stream eofexception

我正在使用DataInputStream并且有一个关于EOFExceptions的问题.

根据java文档:

表示在输入期间意外到达文件末尾或流末尾的信号.

此异常主要由数据输入流用于信号流的结束.请注意,许多其他输入操作在流末尾返回特殊值而不是抛出异常.

这是否意味着当生成EOFException时,流不会再次打开?这是否意味着你永远不会期待它的更多数据?

如果输出流连接到输入流并且调用了outputstream.close(),输入流是否会收到EOFException或IOException?

IOException被描述为:

表示发生某种I/O异常的信号.此类是由失败或中断的I/O操作产生的一般异常类.

输出流上的close是否会在datainputstream端产生EOFException或IOException?

Pyr*_*cal 7

关键词是出乎意料的.

如果您使用DataInputStream并读取4字节整数但流中只剩下3个字节,您将获得EOFException.

但是如果你在流的末尾调用read(),你将只返回-1并且没有异常.


use*_*421 7

当您到达流的末尾(文件末尾,或对等关闭连接):

  • read() 返回-1
  • readLine() 返回null
  • readXXX()对于任何其他X投掷EOFException.

流仍然是打开的,但您应该停止阅读并关闭它.