【问题标题】:Will I be able to successfully deserialize a previous version of my class?我能否成功反序列化我的课程的先前版本?
【发布时间】:2014-04-03 04:27:57
【问题描述】:

我有这样的课

class MyClass implements MyInterface, Serializable {
private static final serialVersionUID = 42;
...
}

interface MyInterface {
void A();
void B();
}

我在数据库中保存了一些 MyClass 的序列化实例。

现在,我正在向 MyInterface 添加一个新函数,因此它变为:

interface MyInterface {
void A();
void B();
void C();
}

我已经在 MyClass 中实现了C()

我之前序列化的实例是否会毫无问题地反序列化为新类?我认为是的,但如果可能的话,我想用解释来确认。

【问题讨论】:

    标签: java serialization deserialization


    【解决方案1】:

    是的,添加新函数应该没有问题,只要 serialVersionUID 保持不变,因为 Java 仅在序列化对象时保留有关字段的信息。

    来自ObjectOutputStream

    [序列化对象的]状态是通过使用 writeObject 方法将各个字段写入 ObjectOutputStream 来保存的……

    【讨论】:

      【解决方案2】:

      如果修改后的类中的serialVersionUID 相同,序列化将尽最大努力将数据反序列化到新类中,而忽略任何差异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多