1

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

ParentChild类实现Serializable. Parent类有字段a,b,cChild类有e。我将字段添加dParent并更新了父序列化,现在我们的旧客户端无法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)

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

4

2 回答 2

1

旧 Parent 创建的对象由旧的 serialVersionUID 序列化。新对象由新的 serialVersionUID 序列化。您实现这一点的方式,Child 无法同时读取旧对象和新对象。

您要么必须具有相同的 serialVersionUID。如果编译器抱怨放一个抑制注释。您想清楚地传达编译器它是同一个对象。

于 2012-07-20T19:25:19.380 回答
1

好的,这就是问题所在。我了解您正在使用此类来序列化您的数据,但是,这是一个类定义。问题不是序列化问题。您已经构建了类以特定方式读取文件,现在您正在以不同的方式构建文件。它不会“序列化”,因为它不再是同一类型的文件。如果你说:我用 a 然后 b 然后 c 字段创建一个文件,并且此类将在第一个字段中读取为 a,第二个字段为 b 等。然后将文件更改为使用 b,c,然后是 a。旧班级仍然会认为“a”是第一位的,没有理由不应该这样做。

于 2012-07-20T19:53:45.007 回答