我正在使用DataInputStream并且有一个关于EOFExceptions的问题.
根据java文档:
表示在输入期间意外到达文件末尾或流末尾的信号.
此异常主要由数据输入流用于信号流的结束.请注意,许多其他输入操作在流末尾返回特殊值而不是抛出异常.
这是否意味着当生成EOFException时,流不会再次打开?这是否意味着你永远不会期待它的更多数据?
如果输出流连接到输入流并且调用了outputstream.close(),输入流是否会收到EOFException或IOException?
IOException被描述为:
表示发生某种I/O异常的信号.此类是由失败或中断的I/O操作产生的一般异常类.
输出流上的close是否会在datainputstream端产生EOFException或IOException?
关键词是出乎意料的.
如果您使用DataInputStream并读取4字节整数但流中只剩下3个字节,您将获得EOFException.
但是如果你在流的末尾调用read(),你将只返回-1并且没有异常.
当您到达流的末尾(文件末尾,或对等关闭连接):
read()
返回-1
readLine()
返回null
readXXX()
对于任何其他X投掷EOFException
.
流仍然是打开的,但您应该停止阅读并关闭它.