我的组织使用自定义序列化技术,我们使用输出流迭代地存储对象。我遇到了以下问题:
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阅读器无法解决这个问题。我对这个问题有一个丑陋的解决方案,但它根本不会很好地扩展,所以我宁愿通过引入它来污染读者的思想。但是,我真的很想知道其他人会如何处理类似情况。
答案 0 :(得分:1)
旧的Parent创建的对象由旧的serialVersionUID序列化。新对象由新的serialVersionUID序列化。 你实现它的方式,Child不能同时读取旧对象和新对象。
您必须拥有相同的serialVersionUID。如果编译器抱怨放置一个抑制注释。你想清楚地沟通编译器它是同一个对象。
答案 1 :(得分:1)
好的,看看那个问题。我知道你正在使用这个类来序列化你的数据,但是,这是一个类def。问题不是序列化问题。您构建了类以特定方式读取文件,现在您以不同方式构造文件。它不会“序列化”,因为它不再是同一类型的文件。如果你说:我正在制作一个带有b然后是c字段的文件,这个类将在第一个字段中读取为a,第二个字段读取为b等,然后将文件更改为b,c,然后a。老班仍然会认为“a”是第一位的,没有理由不这样做。