关于java.io.EOFException产生的原因以及解决方案

 更新时间:2025年01月23日 14:26:27   作者:宣布无人罪  
文章总结:EOFException异常通常发生在尝试从空的ObjectInputStream对象中读取数据时,解决方法是在finally语句中添加判断,确保objectInputStream不为空后再进行关闭操作,在处理1.txt文件为空的情况时,捕获EOFException可以避免程序终止,并且不会抛出空指针异常

java.io.EOFException产生的原因及解决

异常发生场景

使用ObjectInputStream类往文件中传入自定义类student时

ObjectInputStream objectInputStream=null;
        ArrayList<Student> students=null;
        try {
            objectInputStream = new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));
            students = (ArrayList<Student>) objectInputStream.readObject();
            System.out.println("数据载入成功");
​
        }catch (Exception e) {
            e.printStackTrace();
            System.out.println("数据载入失败");
        }

异常产生原因

经过导师查找,终于发现了OFException产生的原因

ObjectInputStream objectInputStream=null;
//idea上显示null为灰色,说明 new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));返回值为null,即文件"D:\\桌面\\java38\\javase08\\java08\\1.txt"为空
objectInputStream = new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));

objectInputStream为空值,则不能使用objectInputStream.close();如果使用会产生并发症 java.lang.NullPointerException(空指针异常)

异常解决

        ObjectInputStream objectInputStream=null;
        ArrayList<Student> students=null;
        try {
            objectInputStream = new ObjectInputStream(new FileInputStream("D:\\桌面\\java38\\javase08\\java08\\1.txt"));
            students = (ArrayList<Student>) objectInputStream.readObject();
            System.out.println("数据载入成功");
​
        } catch (EOFException e) {
            students = new ArrayList<>();
​
        }catch (Exception e) {
            e.printStackTrace();
            System.out.println("数据载入失败");
        } finally {
            if(objectInputStream != null) {
                objectInputStream.close();
            }

在finally语句内加上判断,不等于空值才关闭

捕获EOFException,但不打印错误,为students,new一个新的集合(本来这里也有一个会出bug的地方,但是被我之前就给students赋了null值,(ArrayList<Student> students=null;)所以catch里new一个新的对象)

如果不为空,则

students = (ArrayList<Student>) objectInputStream.readObject();

正常执行,不报错误~

总结

java.io.EOFException不是一个常出现的问题,而且并发症 java.lang.NullPointerException(空指针异常),只有objectInputStream.readObject();接收为null且1.txt文件为空时才会出现

EOFException只需要捕获,该bug在本场景下被捕获后程序就不会终止了,甚至不处理也行。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java开发岗位面试被问到反射怎么办

    Java开发岗位面试被问到反射怎么办

    这篇文章主要介绍了java 面向对象面试集锦的相关资料,这里整理了面向对象的基础知识,帮助大家学习理解此部分的知识,需要的朋友可以参考下
    2021-07-07
  • Java使用Fastjson2处理JSON字段大小写不一致的优雅方案

    Java使用Fastjson2处理JSON字段大小写不一致的优雅方案

    这篇文章主要为大家详细介绍了Java使用Fastjson2处理JSON字段大小写不一致的优雅方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-04-04
  • 浅谈Java多进程程序的运行模式

    浅谈Java多进程程序的运行模式

    这篇文章主要介绍了浅谈Java多进程程序的运行模式,包括对进程阻塞问题的讨论等,需要的朋友可以参考下
    2015-11-11
  • 使用Spring多数据源配置

    使用Spring多数据源配置

    这篇文章主要介绍了使用Spring多数据源配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • servlet实现简单的权限管理和敏感词过滤功能

    servlet实现简单的权限管理和敏感词过滤功能

    JavaEE课要求用servlet和过滤器实现权限管理和敏感词过滤功能,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java Web实现简易图书管理系统

    Java Web实现简易图书管理系统

    这篇文章主要为大家详细介绍了Java Web实现简易图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • SpringBoot详细讲解异步任务如何获取HttpServletRequest

    SpringBoot详细讲解异步任务如何获取HttpServletRequest

    在使用框架日常开发中需要在controller中进行一些异步操作减少请求时间,但是发现在使用@Anysc注解后会出现Request对象无法获取的情况,本文就此情况给出完整的解决方案
    2022-04-04
  • SpringSecurity-2.7中跨域问题解析

    SpringSecurity-2.7中跨域问题解析

    这篇文章主要介绍了SpringSecurity-2.7中跨域问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • SpringBoot实现异步调用的方法示例

    SpringBoot实现异步调用的方法示例

    本文介绍了在Java的SpringBoot中实现异步请求和异步调用的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Java如何修改JsonObject中的属性值

    Java如何修改JsonObject中的属性值

    这篇文章主要介绍了Java如何修改JsonObject中的属性值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论