解决循环操作ObjectInputStream的readObject()方法的EOF异常

来源:互联网 发布:微信js获取signature 编辑:程序博客网 时间:2024/06/06 10:11
// 读入文件FileInputStream reader = new FileInputStream("accout.txt");ObjectInputStream bbr = new ObjectInputStream(reader);Object object;while((object = bbr.readObject()) != null ){AccoutBean bean = (AccoutBean)object;System.out.println(bean);}

会有

Exception in thread "main" java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at homework_2_6.HomeWork_2_6_2v.readerAcctinfo(HomeWork_2_6_2v.java:128)
    at homework_2_6.HomeWork_2_6_2v.main(HomeWork_2_6_2v.java:108)

错误。

如果用 available() 判断是否读完是没有用的。

这里有3种解决方法:

1、在写入的时候,

// 写入账户信息文件FileOutputStream write = new FileOutputStream("accout.txt");ObjectOutputStream bw = new ObjectOutputStream(write);for(int i =0; i < accouts.length; i++){bw.writeObject(accouts[i]);}bw.writeObject(null);bw.close();write.close();
最后写入 bw.writeObject(null);


2、将若干个对象(数量不定)都装入一个容器中(如:ArrayList之类),然后将容器这一个对象写入就行了。读取时,只要读取一个对象(即容器对象)就行了

写入时:

        // 写入账户信息文件
        FileOutputStream write = new FileOutputStream("accout.txt");
        ObjectOutputStream bw = new ObjectOutputStream(write);
        bw.writeObject(accouts);
        
//        for(int i =0; i < accouts.length; i++){
//            bw.writeObject(accouts[i]);
//        }
//        
//        bw.writeObject(null);
        bw.close();
        write.close();

直接写入 accouts 数据对象。 我用的例子是 数据。


读入的时候改成:

// 读入文件FileInputStream reader = new FileInputStream("accout.txt");ObjectInputStream bbr = new ObjectInputStream(reader);//while((object = bbr.readObject()) != null ){//AccoutBean bean = (AccoutBean)object;//System.out.println(bean);//}AccoutBean[] accouts = (AccoutBean[]) bbr.readObject();for(AccoutBean acct:accouts){System.out.println(acct);}


3、直接捕获异常 EOFException,就不举例子了。



参看:http://bbs.csdn.net/topics/300140830



0 0
原创粉丝点击