java.io.EOFException产生原因及解决方法(附代码)

 更新时间:2023年09月20日 11:03:14   作者:梦呓  
java.io.EOFException表示在读取数据时突然遇到了文件或流的末尾,也就是说客户端或服务器已经关闭了连接,但是你还在尝试读取数据,这篇文章主要给大家介绍了关于java.io.EOFException产生原因及解决的相关资料,需要的朋友可以参考下

01 异常发生场景

使用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("数据载入失败");
        }

02 异常产生原因

经过导师查找,终于发现了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(空指针异常)

03 异常解决

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();正常执行,不报错误

04 总结

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

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

到此这篇关于java.io.EOFException产生原因及解决的文章就介绍到这了,更多相关java.io.EOFException解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中关键字final finally finalize的区别介绍

    Java中关键字final finally finalize的区别介绍

    这篇文章主要给大家分享的是 Java中final,finally,finalize 到底有什么区别,文章围绕final,finally,finalize的相关资料展开详细内容,具有一定的参考的价值,需要的朋友可以参考一下
    2022-04-04
  • 关于@CacheEvict无法解决分页缓存清除的解决思路

    关于@CacheEvict无法解决分页缓存清除的解决思路

    这篇文章主要介绍了关于@CacheEvict无法解决分页缓存清除的解决思路,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java实现分布式项目搭建的方法

    java实现分布式项目搭建的方法

    这篇文章主要介绍了java实现分布式项目搭建的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • RabbitMQ从入门到精通与实战指南

    RabbitMQ从入门到精通与实战指南

    本文详细介绍了RabbitMQ,包括其基础认知、核心架构、交换机类型、高级特性、实战演练和运维监控,通过本文的学习,读者可以掌握RabbitMQ的使用方法和最佳实践,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • 详谈Java几种线程池类型介绍及使用方法

    详谈Java几种线程池类型介绍及使用方法

    下面小编就为大家带来一篇详谈Java几种线程池类型介绍及使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • SWT(JFace) 打印功能

    SWT(JFace) 打印功能

    SWT(JFace)体验之打印功能
    2009-06-06
  • 新建springboot项目时,entityManagerFactory报错的解决

    新建springboot项目时,entityManagerFactory报错的解决

    这篇文章主要介绍了新建springboot项目时,entityManagerFactory报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java selenium教程之selenium详细介绍

    java selenium教程之selenium详细介绍

    本文主要介绍Java selenium,这里整理了selenium的一些基本资料,此软件主要用于Web UI自动测试框架,有兴趣的同学可以看一下
    2016-08-08
  • 浅谈SpringBoot内嵌Tomcat的实现原理解析

    浅谈SpringBoot内嵌Tomcat的实现原理解析

    这篇文章主要介绍了浅谈SpringBoot内嵌Tomcat的实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 面试中遇到的java逃逸分析问题

    面试中遇到的java逃逸分析问题

    这篇文章主要介绍了面试中遇到的java逃逸分析问题,逃逸分析(Escape Analysis)简单来讲就是,Java Hotspot 虚拟机可以分析新创建对象的使用范围,并决定是否在 Java 堆上分配内存的一项技术。,需要的朋友可以参考下
    2019-06-06

最新评论