EOFException何时会在JAVA的流中发生

2022-09-03 01:48:18

我正在使用DataInputStream,并有一个关于EOFExceptions的问题。

根据java文档:

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

此异常主要由数据输入流用于表示流的结束。请注意,许多其他输入操作在流结束时返回特殊值,而不是引发异常。

这是否意味着当生成 EOFException 时,流将永远不会再次打开?这是否意味着您永远不应该期望从中获取更多的数据?

如果输出流连接到输入流并调用 outputstream.close(),则输入流会收到 EOFException 还是 IOException?

IOException 被描述为:

指示发生了某种 I/O 异常。此类是由失败或中断的 I/O 操作产生的异常的常规类。

输出流的关闭是在数据输入流端产生 EOFException 还是 IOException?


答案 1

关键词是出乎意料的。

如果您使用DataInputStream并读取一个4字节的整数,但流中只剩下3个字节,您将获得EOFException。

但是如果你在流结束时调用read(),你只会得到-1,没有例外。


答案 2

当您到达流的末尾(文件末尾或对等方关闭连接)时:

  • read()返回 -1
  • readLine()返回空值
  • readXXX()对于任何其他 X 抛出 。EOFException

流仍处于打开状态,但您应该停止读取并关闭它。


推荐