3

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

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

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

4

2 回答 2

3

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

于 2012-10-24T17:33:28.843 回答
1

对象版本控制的难度通常被夸大了。最棒的是一开始就知道你能做什么和不能做什么。仔细查看 Object Serialization 规范的 Object Versioning 部分中的规则,并认真遵循它们

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

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

于 2012-10-24T21:40:40.223 回答