应该如何维护序列化对象?

时间:2012-10-24 17:24:10

标签: java serialization io version

我正在创建一个Serializable对象描述符,它将存储非Serailizable实体的重要状态数据。如何在应用程序升级期间保持旧描述符有效?我正在考虑打开所有已知的先前状态(升级时)并提示状态自我升级。也许通过:

void onUpgrade(int oldVersion, int newVersion, int updateFlags);

但我不知道这是否是可序列化维护的好方法。

2 个答案:

答案 0 :(得分:3)

我会为你的外部代表建议另一种形式。如您所述,序列化对象很难保持兼容。最简单的方法是使用jaxb注释注释您的对象,然后使用Jaxb来读/写它。

答案 1 :(得分:1)

对象版本控制的难度通常被夸大了。最重要的是从知道你能做什么和不能做什么开始。请仔细查看对象序列化规范的对象版本控制部分中的规则,并虔诚地遵循它们

  • 不要更改继承;
  • 不要更改任何字段的数据类型;
  • 限制自己添加和减去字段;
  • 从不更改serialVersionUID。

如果这还不够,请准备使用writeReplace()/ readResolve()机制和/或serializableFields机制。