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

		// 读入文件
		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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值