先来看打印的异常信息:
Exception in thread “main” java.io.StreamCorruptedException: invalid stream header: D6D0B9FA
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866)
at java.io.ObjectInputStream.(ObjectInputStream.java:358)
at test.ObjectStreamtest.main(ObjectStreamtest.java:16)
没有修改之前的代码:
public class ObjectStreamtest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ArrayList<Person> s = new ArrayList<>();
s.add(new Person("张三",18));
s.add(new Person("李四",21));
s.add(new Person("王五",16));
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\test\\b.txt"));
oos.writeObject(s);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\test\\a.txt"));
Object o = ois.readObject();
ArrayList<Person> s1 = (ArrayList<Person>)o;
for (Person p:s1){
System.out.println(p);
}
oos.flush();
oos.close();
ois.close();
}
}
Person类:
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
API中对于这个异常原因的解释:
我的问题在于:
序列化和反序列化的文件地址不一致所导致的内部信息不一致。
解决方案:
更改地址
更改过后的代码:`
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\test\\b.txt"));
oos.writeObject(s);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\test\\b.txt"));
Object o = ois.readObject();
再次运行:
运行结果没有问题。
这只是这个异常解决方案之一,其他原因可能和这个类似,仅供参考。