由于 Java 支持异常,我认为EOFException
在尝试读取输入流末尾的字节时会抛出 an ,例如
byte read() throws EOFException, IOException
但实际上InputStream#read返回
数据的下一个字节,如果到达流的末尾,则为 -1。
这让我想起了getchar
C。但另一方面它抛出
IOException
: 如果发生 I/O 错误。
为什么会这样设计?
由于 Java 支持异常,我认为EOFException
在尝试读取输入流末尾的字节时会抛出 an ,例如
byte read() throws EOFException, IOException
但实际上InputStream#read返回
数据的下一个字节,如果到达流的末尾,则为 -1。
这让我想起了getchar
C。但另一方面它抛出
IOException
: 如果发生 I/O 错误。
为什么会这样设计?
许多早期的 API 不太理想,并且有很多讨论,设计人员希望他们可以做得不同。
我推测这不是其中一种情况。抛出“EOFException”可能会鼓励程序员try
阅读,直到捕获到异常。意味着异常处理将被用作控制程序逻辑的一种方式,称为异常处理反模式
以我的拙见,人们应该问自己,在以“正常”方式读取流时,是否应该将到达文件末尾视为异常。
一个异常来让我们知道我们的应用程序存在异常错误行为,事实并非如此。如果您查看EOFException的 javadoc,您会看到,我引用 -
表示输入期间意外到达文件结尾或流结尾。
请注意“意外一词,以及此 javadoc 在下一句中的保留。