为什么EOFException主要由数据输入流使用?

时间:2013-05-13 00:45:44

标签: java exception io stream

来自Java API

  

公共类 EOFException 扩展IOException

     

表示已到达文件结尾或流结束   输入期间意外。

     

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

那么为什么数据输入流与其他输入操作有如此不同?为什么它不像其他输入操作一样返回特殊值来表示流的结尾?因为我认为异常只应用于特殊情况。

1 个答案:

答案 0 :(得分:2)

需要带外返回值来表示EOS。返回基元时使用所有带内值,因此没有可用的带外值,因此必须是例外。

同样适用于ObjectInput.readObject()null是一个带内值,因此不能用于表示EOS。

这与InputStream.read()不同,readUTF()返回-1或字节值-128..127。在这种情况下,-1是带外的。

假设EOFException抛出{{1}}与其他方法对称,尽管它可能在EOS返回null。