java多继承序列化维护向后兼容性
My org使用自定义序列化技术,我们使用输出流迭代存储对象。我遇到了以下问题:
Parent
和Child
类实现Serializable
Parent
类有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 楼答案
旧父对象创建的对象由旧SerialVersionId序列化。新对象由新的SerialVersionId序列化。 按照您的实现方式,孩子不能同时读取旧对象和新对象
要么必须有相同的serialVersionUID。如果编译器抱怨,请放置一个抑制注释。如果是同一个对象,您需要清楚地与编译器进行通信