java - 如何在标准序列化中序列化不可序列化的基类?

标签 java serialization

我无法控制基类的源代码,那么,如何在子类上使用标准序列化呢?

在这个例子中,字段 a 根本没有被序列化,尽管 B 是可序列化的:

//一个.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);
    }

}

输出:

0
20

最佳答案

你不能!
a 字段不会被序列化!
解决方法:实现您的自定义序列化。您应该实现 Externalizable 接口(interface)和 writeExternal、readExternal 方法。 在这些方法中,您可以写入和读取 a 字段的值。

关于java - 如何在标准序列化中序列化不可序列化的基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10493521/

相关文章:

c# - 如何将对象序列化为 json 并将其发送到 Web 服务?

c# - 序列化 System.Windows.Media.ImageSource 对象

java - 如何序列化 JBox2d World 对象?

java - 如何在 IntelliJ Idea 中从 Maven(jar 库)解压 JBehave 的 View 资源?

java - 不同用户登录时静态变量的行为

java - Java ArrayList获取元素的方法

java - 需要帮助弄清楚基本的国际象棋移动逻辑

java - 将 void 方法的内容保存到变量

c# - 如何序列化我的类(class)以通过 retrofit 将其作为 urlencoded 发送

java - 找到有问题的不可序列化成员变量的路径