How to serialize non-serializable base class in standard serialization?

偶尔善良 提交于 2019-12-22 04:31:53

问题


I can't control the source code of the base class, then, how can I use standard serialization on the subclass?

In this example, field a is not serialized at all, though B is serializable:

// a.jar

class A {
    int a;
}

// b.jar

class B
        extends A
        implements Serializable {
    int b;
}

public class HelloWorldApp {

    public static void main(String[] args)
            throws Exception {
        B b = new B();
        b.a = 10;
        b.b = 20;

        ByteArrayOutputStream buf = new ByteArrayOutputStream();

        ObjectOutputStream out = new ObjectOutputStream(buf);
        out.writeObject(b);
        out.close();

        byte[] bytes = buf.toByteArray();
        ByteArrayInputStream _in = new ByteArrayInputStream(bytes);
        ObjectInputStream in = new ObjectInputStream(_in);
        B x = (B) in.readObject();
        System.out.println(x.a);
        System.out.println(x.b);
    }

}

Output:

0
20

回答1:


You can't!
field a will not be serialized!
Work around: implement your custom serialization. You should implement Externalizable interface and writeExternal, readExternal methods. In thess methods you can write and read value of your a field.



来源:https://stackoverflow.com/questions/10493521/how-to-serialize-non-serializable-base-class-in-standard-serialization

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!