有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多继承序列化维护向后兼容性

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

ParentChild类实现SerializableParent类有a,b,c字段,Child类有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阅读器无法处理这个问题。我对这个问题有一个丑陋的解决方案,但它不会很好地扩展,所以我宁愿不通过介绍它来污染读者的头脑。然而,我真的很想听听其他人如何处理类似的情况


共 (1) 个答案

  1. # 1 楼答案

    旧父对象创建的对象由旧SerialVersionId序列化。新对象由新的SerialVersionId序列化。 按照您的实现方式,孩子不能同时读取旧对象和新对象

    要么必须有相同的serialVersionUID。如果编译器抱怨,请放置一个抑制注释。如果是同一个对象,您需要清楚地与编译器进行通信