EOFException在Java中用于标识从输入流读取数据时意外到达末尾,常见于DataInputStream或ObjectInputStream读取过程中。当调用readInt()、readObject()等方法时,若流提前结束则抛出该异常。虽然可通过捕获EOFException判断读取完成,如while(true)循环中依赖异常跳出,但更推荐预先记录数据量或使用返回-1标记结束的read()方法,避免异常控制流程影响性能与可读性。

EOFException(End of File Exception)在Java中通常出现在尝试从数据流中读取数据时,意外到达文件或流的末尾。它属于 java.io.EOFException,是 IOException 的子类。这个异常并不是“使用”来实现某种功能,而是需要被正确处理的一种异常情况。
当程序尝试从输入流中读取更多数据,但已经没有可读内容时,某些输入方法会抛出 EOFException。常见于以下场景:
实际开发中,我们不会主动“使用”它,但可以通过捕获它来判断数据是否读取完毕。典型用法如下:
示例1:读取多个写入的整数
立即学习“Java免费学习笔记(深入)”;
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"))) {
while (true) {
int value = dis.readInt(); // 当到达文件末尾时抛出 EOFException
System.out.println(value);
}
} catch (EOFException e) {
System.out.println("已到达文件末尾,读取完成。");
}
这里利用 while(true) 持续读取,靠抛出 EOFException 来跳出循环。这是一种常见模式,但依赖异常控制流程需谨慎。
里面有2个文件夹。其中这个文件名是:finishing,是我项目还没有请求后台的数据的模拟写法。请求后台数据之后,瀑布流的js有一点点变化,放在文件名是:finished。变化在于需要穿参数到后台,和填充的内容都用后台的数据填充。看自己项目需求来。由于chrome模拟器是不允许读取本地文件json的,所以如果你要进行测试,在hbuilder打开项目就可以看到效果啦,或者是火狐浏览器。
92
示例2:读取多个序列化对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("objects.ser"))) {
while (true) {
Object obj = ois.readObject();
System.out.println(obj);
}
} catch (EOFException e) {
System.out.println("所有对象已读取完毕。");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
虽然捕获 EOFException 是可行的,但它属于异常控制流程,性能略低且不够优雅。更推荐的做法是:
例如,对于普通字节流,应检查 read() 返回值:
int b;
while ((b = inputStream.read()) != -1) {
// 处理字节
}
这种方式不抛异常,效率更高。
基本上就这些。EOFException 不是主动使用的工具,而是流操作中一种表示“读到尽头”的异常信号,合理捕获它可以帮助完成读取逻辑,但优先考虑避免依赖异常控制流程的设计。
以上就是Java中EOFException在流读取中如何使用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号