关于JAVA序列化和反序列化
一个类如果需要序列化,需要实现 Serializable 接口,但是遇到类带有继承关系,JVM 的初始化顺序以及属性赋值是什么呢
代码为 jdk1.7
public class Main { public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("employee.dat")); Foo1 foo2 = new Foo1(); foo2.setA("a"); foo2.setB("b"); oos.writeObject(foo2); oos.flush(); oos.close(); ObjectInputStream ois = new ObjectInputStream( new FileInputStream("employee.dat")); Foo1 foo21 = (Foo1) ois.readObject(); System.out.println(foo21.getB() + " " + foo21.getA()); ois.close(); } } class Foo { private String a; public Foo() { System.out.println("foo..."); } public String getA() { return a; } public void setA(String a) { this.a = a; } } class Foo1 extends Foo implements Serializable { private String b; public String getB() { return b; } public void setB(String b) { this.b = b; } public Foo1() { System.out.println("foo1..."); } @Override public String toString() { return "foo1"; } }
这要分成4种情况
1.父,子类都实现 Serializable
反序列化只会打印 foo1... 和 a,b
2.父子都不实现
反序列报错
3.父类实现,子类不实现
反序列化只会打印 foo1... 和 a,b
4.子类实现 父类不实现
打印 foo... foo1... 和 a,null