出现EOFException错误,按视频中的是顺序错误我没办法理解我这个代码顺序哪里出错了

出现EOFException错误,按视频中的是顺序错误我没办法理解我这个代码顺序哪里出错了

package com.imooc.print.classfile;

import java.io.*;

public class Test {
    public static void main(String[] args) {
        Product p1 = new Product("123", "iphone", "telephone", 4888.0);
        Product p2 = new Product("234", "ipad", "computer", 5088.0);
        Product p3 = new Product("345", "macbook", "computer", 10688.0);
        Product p4 = new Product("256", "iwatch", "watch", 4799.0);
        try {
            FileOutputStream fos = new FileOutputStream("apple.txt");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            FileInputStream fis = new FileInputStream("apple.txt");
            BufferedInputStream bis = new BufferedInputStream(fis);
            ObjectInputStream ois = new ObjectInputStream(bis);
            oos.writeObject(p1);
            oos.writeObject(p2);
            oos.writeObject(p3);
            oos.writeObject(p4);
            oos.flush();
            System.out.println((Product) ois.readObject());
            System.out.println((Product) ois.readObject());
            System.out.println((Product) ois.readObject());
            System.out.println((Product) ois.readObject());

            fos.close();
            bos.close();
            oos.close();
            fis.close();
            bis.close();
            ois.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你要在写对象的时候,把4个Product放在一个集合中,然后writeObject这个集合,只写一次。读的时候只读一次,readObject出之后也放在集合中。都要对这个集合进行操作。因为在读的时候,它会一次性读出。祝:学习愉快

  • 谢谢老师,但是我这么做了后,还是没有消失 之后我把缓冲流的语句删除后,就不会报这个异常了,想知道是为什么。 是因为缓冲流导致运行顺序出错吗
    2018-10-09 18:56:07
  • 只读写一次数据是正确的。另外你的代码中输入输出流要正着开,反着关。意思就是fos, bos, oos这个顺序开的,但关闭时需要先关oos,然后bos,最后是fos。因为oos依赖bos打开的,bos是依赖fos打开的。你换一个关闭的顺序就好了。
    2018-10-09 19:20:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师