加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

IO序列号AC

发布时间:2020-12-15 07:43:10 所属栏目:Java 来源:网络整理
导读:Person 1 package MyTest; 2 3 import java.io.Serializable; 4 5 public class Person implements Serializable { 6 /** 7 * 8 */ 9 private static final long serialVersionUID = 1L ; 10 private String name; 11 private int age; 12 13 public Person(

Person

 1 package MyTest;
 2 
 3 import java.io.Serializable;
 4 
 5 public class Person implements Serializable {
 6     /**
 7      * 
 8      */
 9     private static final long serialVersionUID = 1L;
10     private String name;
11     private int age;
12 
13     public Person(String name,int age) {
14         super();
15         this.name = name;
16         this.age = age;
17     }
18 
19     @Override
20     public String toString() {
21         return name + "t" + age;
22     }
23 }
View Code

FileOutputStream

 1 package MyTest;
 2 
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.ObjectOutputStream;
 6 
 7 
 8 public class Out {
 9     public static void main(String[] args) throws Exception{
10         File file = new File("1.txt");
11         FileOutputStream fos = new FileOutputStream(file,true);
12         ObjectOutputStream oos = new ObjectOutputStream(fos);
13         oos.writeObject(new Person("qwe",18));
14         oos.writeObject(new Person("abc",20));
15         oos.close();
16     }
17 }
View Code

ObjectInputStream

 1 package MyTest;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.ObjectInputStream;
 6 
 7 public class In {
 8     public static void main(String[] args) throws Exception {
 9         File file = new File("1.txt");
10         FileInputStream fis = new FileInputStream(file);
11         ObjectInputStream ois = new ObjectInputStream(fis);
12         while(fis.available()>0) {
13             System.out.println(ois.readObject());            
14         }
15         ois.close();
16     }
17 }
View Code

没有true追加进txt信息之前

追加之后

?

问题描述:在使用java.io.ObjectInputStream类的readObject()方法去读取包含有序列化了多个(两个及两个以上)类的文件时,当读取到第二个类时,会抛出题目中提到的异常.

原因:任何一个文件都有文件头(header)和文件体(body),java在以追加的方式写一个文件时,他每次都会向文件追加一个header,该header是无法识别的,所以回抛出该异常

解决方法:

    java提供的对象输出流无法解决该问题,我们可以自己写一个java.io.ObjectOutputStream类的子类,该子类如下:

 1 package MyTest;
 2 
 3 import java.io.IOException;
 4 import java.io.ObjectOutputStream;
 5 import java.io.OutputStream;
 6 
 7 public class MyObjectOutputStream extends ObjectOutputStream {
 8     protected MyObjectOutputStream() throws IOException,SecurityException {
 9         super();
10     }
11 
12     @Override
13     protected void writeStreamHeader() throws IOException {
14         super.writeStreamHeader();
15     }
16 
17     public MyObjectOutputStream(OutputStream out) throws IOException {
18         super(out);
19     }
20 }
View Code

该类重写了父类中的writeStreamHeader()方法,该方法用于写入header信息,这里让他不进行任何操作,其他的全部使用父类的方法

在逻辑代码中,判断要写入的文件是否是第一次输入即可,代码如下:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读