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

来自Java API

公共类EOFException扩展了IOException

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

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

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

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

这同样适用于ObjectInput.readObject()null是带内值,因此不能用于向EOS发送信号。

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

一个假设readUTF()抛出EOFException与其他方法对称,尽管它可能在EOS返回null。