我正在使用DataInputStream并且有一个关于EOFExceptions的问题。
根据java docs:
表示文件结尾或结尾 意外地达到了流 在输入过程中。
此异常主要由数据使用 输入流以表示流的结束。 注意许多其他输入操作 返回特殊值 流而不是扔 异常。
这是否意味着当生成EOFException时,流不会再次打开?这是否意味着你永远不会期待它的更多数据?
如果输出流连接到输入流并且调用了outputstream.close(),输入流是否会收到EOFException或IOException?
IOException被描述为:
表示某些I / O异常 排序已经发生。这个班是 一般的例外类别 失败或中断的I / O. 操作
输出流上的close是否会在datainputstream端产生EOFException或IOException?
答案 0 :(得分:7)
关键词出乎意料。
如果使用DataInputStream并读取4字节整数但流中只剩下3个字节,则会出现EOFException。
但是如果你在流的末尾调用read(),那么你只需返回-1并且没有例外。
答案 1 :(得分:7)
当您到达流的末尾(文件末尾或对等关闭连接)时:
read()
返回-1 readLine()
返回null readXXX()
针对任何其他X投掷EOFException
。流仍处于打开状态,但您应该停止阅读并关闭它。
答案 2 :(得分:4)
回答你问题的另一部分:是的,EOF意味着在流上不会再看到任何数据;你应该关闭它。
答案 3 :(得分:3)
EOFException是IOException的子类。如果您尝试从流中读取并且没有更多数据要读取(例如,因为您的DataInputStream包裹在FileInputStream中并且您尝试读取的文件比文件中剩余的更多),它将被抛出。
答案 4 :(得分:0)
抛出EOFException: