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

标签 java exception io stream

来自 Java API

public class EOFException extends IOException

Signals that an end of file or end of stream has been reached unexpectedly during input.

This exception is mainly used by data input streams to signal end of stream. Note that many other input operations return a special value on end of stream rather than throwing an exception.

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

最佳答案

需要带外返回值来发出 EOS 信号。返回基元时会使用所有带内值,因此没有可用的带外值,因此它必须是一个异常(exception)。

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

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

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

关于java - 为什么 EOFException 主要由数据输入流使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513498/

相关文章:

php - 未处理的异常 : Redefining already defined constructor for class

io - 测试从衍生进程捕获的 IO

java - 通过 Java 中的标准输出更快的输出?

parsing - 高效灵活的二进制数据解析

java - 什么类转换为 GWT 中的 java 脚本?

sql try/catch rollback/commit - 防止回滚后错误提交

用于求解斐波那契的 Java 8 Lambda 表达式(非递归方式)

.net - 有没有办法让应用程序从非托管访问冲突异常中恢复?

java - hibernate Spring 事务

java - 一对多关系 child 抛出 "One or more instances could not be made persistent"