多继承序列化保持向后兼容性

时间:2012-07-20 19:05:24

标签: java inheritance serialization

我的组织使用自定义序列化技术,我们使用输出流迭代地存储对象。我遇到了以下问题:

ParentChild类实施SerializableParent类包含字段a,b,cChild类包含e。我将字段d添加到Parent并更新了父级的序列化,现在我们的旧客户端无法正确读取Child序列化代码。这是因为Child序列化代码:

OutputStream in = getCurrentOutStream();

current_serialization_num = readVersionNum(in) // The version num is similar to Java's UID and is updated when fields are added.
readParent(in)
e = readField(in)

由于序列化是通过DataOutputStream完成的,好的XML阅读器无法解决这个问题。我对这个问题有一个丑陋的解决方案,但它根本不会很好地扩展,所以我宁愿通过引入它来污染读者的思想。但是,我真的很想知道其他人会如何处理类似情况。

2 个答案:

答案 0 :(得分:1)

旧的Parent创建的对象由旧的serialVersionUID序列化。新对象由新的serialVersionUID序列化。 你实现它的方式,Child不能同时读取旧对象和新对象。

您必须拥有相同的serialVersionUID。如果编译器抱怨放置一个抑制注释。你想清楚地沟通编译器它是同一个对象。

答案 1 :(得分:1)

好的,看看那个问题。我知道你正在使用这个类来序列化你的数据,但是,这是一个类def。问题不是序列化问题。您构建了类以特定方式读取文件,现在您以不同方式构造文件。它不会“序列化”,因为它不再是同一类型的文件。如果你说:我正在制作一个带有b然后是c字段的文件,这个类将在第一个字段中读取为a,第二个字段读取为b等,然后将文件更改为b,c,然后a。老班仍然会认为“a”是第一位的,没有理由不这样做。