我正在创建一个可序列化的对象描述符,它将存储非可序列化实体的重要状态数据。如何在应用程序升级期间保持旧描述符有效?我正在考虑打开所有已知的先前状态(升级时)并提示状态自行升级。也许通过:
void onUpgrade(int oldVersion, int newVersion, int updateFlags);
但我不知道这是否是可序列化维护的好方法。
我正在创建一个可序列化的对象描述符,它将存储非可序列化实体的重要状态数据。如何在应用程序升级期间保持旧描述符有效?我正在考虑打开所有已知的先前状态(升级时)并提示状态自行升级。也许通过:
void onUpgrade(int oldVersion, int newVersion, int updateFlags);
但我不知道这是否是可序列化维护的好方法。
我会为您的外部代表建议另一种形式。正如您已经指出的,序列化对象很难保持兼容。最简单的做法是使用 jaxb 注释来注释您的对象,然后使用 Jaxb 读取/写入它。
对象版本控制的难度通常被夸大了。最棒的是一开始就知道你能做什么和不能做什么。仔细查看 Object Serialization 规范的 Object Versioning 部分中的规则,并认真遵循它们:
如果这还不够,请准备好使用 writeReplace()/readResolve() 机制和/或 serializableFields 机制。