关于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


posted @ 2018-04-12 16:11  cacher  阅读(125)  评论(0编辑  收藏  举报