何时会在JAVA的流中发生EOFException

时间:2009-03-19 22:39:00

标签: java input stream eofexception

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

根据java docs:

  

表示文件结尾或结尾   意外地达到了流   在输入过程中。

     

此异常主要由数据使用   输入流以表示流的结束。   注意许多其他输入操作   返回特殊值   流而不是扔   异常。

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

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

IOException被描述为:

  

表示某些I / O异常   排序已经发生。这个班是   一般的例外类别   失败或中断的I / O.   操作

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

5 个答案:

答案 0 :(得分:7)

关键词出乎意料。

如果使用DataInputStream并读取4字节整数但流中只剩下3个字节,则会出现EOFException。

但是如果你在流的末尾调用read(),那么你只需返回-1并且没有例外。

答案 1 :(得分:7)

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

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

流仍处于打开状态,但您应该停止阅读并关闭它。

答案 2 :(得分:4)

回答你问题的另一部分:是的,EOF意味着在流上不会再看到任何数据;你应该关闭它。

答案 3 :(得分:3)

EOFException是IOException的子类。如果您尝试从流中读取并且没有更多数据要读取(例如,因为您的DataInputStream包裹在FileInputStream中并且您尝试读取的文件比文件中剩余的更多),它将被抛出。

答案 4 :(得分:0)

抛出EOFException:

  1. 如果 STREAM 中没有数据,但您正在尝试读取...例如,如DataInputStream,ObjectInputStream,RandomAccessFile等链流的读取方法,如果他们尝试从FileInputStream中读取,则抛出EOFException但FileInputStream为空
  2. 或者格式不匹配...例如,如果存在int并且您正在使用DataInputStream的readFloat()