如何在Java中进行更灵活的序列化和反序列化?

Kyl*_*yle 5 java serialization

如果我在Java中序列化一个对象,然后在java类中添加一个额外的字段,我就无法将该对象反序列化为修改后的类.

是否有一个序列化库或某种方式,我可以反序列化不那么严格,如果有一个额外的字段添加到类,那么它只是在反序列化旧版本的类时填充null?

Kat*_*one 7

你需要继续serialVersionUID上课.请查看Sun本文中的 "版本控制"部分.

  • Sun的更新文章链接http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html (3认同)

mik*_*era 5

你有很多潜在的选择.

您可以使用图形序列化库来定义和管理您的格式,例如Google的协议缓冲区Kryo.我相信这两者都内置了对版本控制的支持.

您可以编写自己的自定义序列化代码并明确处理版本 - 例如,序列化为XML等灵活格式.读取XML时,如果未指定特定字段,则可以将其配置为使用默认值.

或者您可以以"灵活"的方式设计您的类,例如将所有字段存储在HashMap中并由字符串索引.根据您的尝试,这可能是一个方便的选择.


Wil*_*ung 0

实施Externalized,你就可以做任何你想做的事。这将串行/反序列化的责任完全放在被序列化的类上。