序列化异常:
java.io.InvalidClassException: DemoPerson; local class incompatible: stream classdesc serialVersionUID = -2071565876962058344, local class serialVersionUID = -8345153069362641443
序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输。 对象 -- 流数据(ObjectOutputStream)
反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象。流数据 -- 对象(ObjectInputStream)
序列化流和反序列化流不同于字节流 字符流 内存字节流,这些都是把字符串写入/读取文件,序列化流和反序列化流可以将对象写入/读取文本文件中.
但是我们要注意的是,写入和读取的文件要实现Serializable这个接口,当然这个接口是没有任何方法的,直接implements就好,类似于这种没有任何方法的接口被称为标记接口.
解决方法:
统一所有serialVersionUID,代码如下:
private static final long serialVersionUID = -2071565876962058344L;
// 实际代码
1 public class Person implements Serializable {
2 private static final long serialVersionUID = -2071565876962058344L;
3
4 private String name;
5
6 // private int age;
7
8 private transient int age;
9
10 // int age;
11
12 public Person() {
13 super();
14 }
15
16 public Person(String name, int age) {
17 super();
18 this.name = name;
19 this.age = age;
20 }
21
22 public String getName() {
23 return name;
24 }
25
26 public void setName(String name) {
27 this.name = name;
28 }
29
30 public int getAge() {
31 return age;
32 }
33
34 public void setAge(int age) {
35 this.age = age;
36 }
37
38 @Override
39 public String toString() {
40 return "Person [name=" + name + ", age=" + age + "]";
41 }
42 }
ObjectStream类:
1 import java.io.FileInputStream;
2 import java.io.FileOutputStream;
3 import java.io.IOException;
4 import java.io.ObjectInputStream;
5 import java.io.ObjectOutputStream;
6
7 public class ObjectStreamDemo {
8 public static void main(String[] args) throws IOException, ClassNotFoundException {
9 // write();
10
11 read();
12 }
13
14 private static void read() throws IOException, ClassNotFoundException {
15 //反序列化对象
16 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oss.txt"));
17 //接收对象是Object
18 Object ob = ois.readObject();
19
20 ois.close();
21
22 System.out.println(ob);
23 }
24
25 private static void write() throws IOException {
26 //创建序列化输出流
27 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oss.txt"));
28
29 Person p = new Person("熊大", 16);
30
31 oos.writeObject(p);
32
33 oos.close();
34 }
35 }