我有几件事我想澄清一下:
当存储其他难以存储的数据时,对象序列化非常方便。您使用具有SerialVersionUUID的类,然后您可以阅读&写下来。如果:
提前感谢您回答此问题。如果问题不好,我道歉。他们刚刚出现在我的脑海里,我想了解更多。
在四处寻找发布礼仪之后,在一篇文章中提出多个问题是不被禁止或不赞成的。唯一的风险是得到错误答案。
答案 0 :(得分:1)
Java对象序列化......是多余的
没有
且健壮吗?
对于在其规范中定义的约束内的类版本控制,它是相当健壮的。对于“健壮”的任何其他价值,您需要定义您的条款。
- 我在serializable类中添加了一个新变量,以便旧的可序列化对象没有这个变量?它是否仍会加载并保持变量未初始化或者是否会抛出异常,使序列化对象无法使用?
醇>
它会使变量未初始化。
- 如果我更改SerialVersionUUID怎么办?
醇>
它将抛出InvalidClassException.
“过时的”序列化对象将不再加载?
见上文。
有没有办法轻松转换它们,或者是否有自定义系统来实现这一目标?
没有。道德:不要改变serialVersionUID
。与互联网上发现的许多善意但不知情的观点相反,这表明例如在每次修订时都会改变它。 从不 更改它,除非 具体 想要InvalidClassException
。
- 如果我更改已存在的变量类型该怎么办?可能有一个转换异常?
醇>
它会引发异常。您无法更改可序列化成员变量的类型。
- 如果“模型”(可序列化的类)被更改,是否有任何替代方法可以保存大型可序列化类,使数据不会损坏?
醇>
您需要学习Versioning chapter of the Object Serialization Specification,其中所有这些问题都得到了解答。