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

Code:
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
 
public class ObjectStream { 
       public static void main(String[] args) { 
               ObjectOutputStream oos = null; 
               ObjectInputStream ois = null; 
               Person pe = null; 
               try { 
                       FileOutputStream out = new FileOutputStream("D:/obj.txt"); 
                       oos = new ObjectOutputStream(out); 
                       Person per = new Person("微软", 14); 
                       pe = new Person("金山", 20); 
                       oos.writeObject(per); 
                       oos.writeObject(pe); 
                        oos.writeObject(null);//解决EOF的关键,加入一个空的对象 
                       System.out.println("添加成功"); 
                       oos.close(); 
                       out.close(); 
               } catch (FileNotFoundException e) { 
                       e.printStackTrace(); 
               } catch (IOException e) { 
                       e.printStackTrace(); 
               } 
                 
               try{ 
                       FileInputStream in = new FileInputStream("D:/obj.txt"); 
                       ois = new ObjectInputStream(in); 
                       Object obj=null; 
                       while((obj=ois.readObject())!=null) { 
                               Person s = (Person)obj; 
                               System.out.println(s); 
                       } 
                       ois.close(); 
                       in.close(); 
               } catch(Exception e) { 
                       e.printStackTrace(); 
               } 
       } 

 
class Person implements Serializable { 
       private String name; 
       private int age; 
         
       public Person(String name, int age) { 
               this.name = name; 
               this.age = age; 
       } 
         
       public String getNmae(){ 
               return name; 
       } 
       public void setName(String name) { 
               this.name = name; 
       } 
 
       public int getAge() { 
               return age; 
       } 
 
       public void setAge(int age) { 
               this.age = age; 
       } 
         
       public String toString() { 
               return "姓名:" + name + "   性别:" + age; 
       } 
 

  大家看标记红色的那行,在这里追加了一个空对象,因为在循环读取对象时,正确读取了两个对象之后,还会在读一次,此时已经没有东西可读,就会抛出EOF错误,判断条件是不等于空,那我们自己就在文件的后面追加一个空对象不就解决了?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值