Java对象序列化...它是多余的和强大的?
问题描述:
我有几件事情我想要澄清一下:Java对象序列化...它是多余的和强大的?
当存储难以存储的数据时,对象序列化非常方便。你使用一个SerialVersionUUID类,然后你可以阅读&。如果:
- 我在可序列化类中添加一个新变量,以便旧的可序列化对象不具有此变量?它是否仍然会加载并保留未初始化的变量,或者是否会抛出异常,从而使序列化对象无法使用?
- 如果我更改SerialVersionUUID,该怎么办? “过时的”序列化对象将不再加载?有没有一种方法可以轻松地转换它们,或者是否有定制系统来实现这一点?
- 如果我改变一个已经存在的变量类型该怎么办?可能存在转场异常?
- 是否有节约的大序列化类的方式,如果“模型”(即序列化类)中的数据不会被损坏任何的替代品被改变?
先感谢您的回答这个问题。如果问题不好,我很抱歉。他们刚刚想到我想知道更多关于它的信息。
环顾四周张贴礼仪问多个问题中的一个职位后不禁止也不皱眉。唯一的风险是得到不正确的答案。
答
Java对象序列化...是多余的
号
和强大?
它在规范中定义的约束条件下对类的版本控制是相当健壮的。对于“健壮”的任何其他价值,您需要定义您的条款。
- 我在序列化类中添加一个新的变量使旧的序列化对象没有这个变量?它是否仍然会加载并保留未初始化的变量,或者是否会抛出异常,从而使序列化对象无法使用?
它将使变量未初始化。
- 如果更改SerialVersionUUID,该怎么办?
它会抛出InvalidClassException.
的 “过时” 的序列化对象将不再加载?
见上文。
有没有一种方法可以很容易地转换它们,或者是否有定制系统来实现这一点?
不道德:不改变serialVersionUID
。与在互联网上发现的许多善意但不知情的观点相反,这表明例如在每个修订版上改变它。 决不改变它,除非你专门希望引起InvalidClassException
。
- 如果我更改已存在的变量类型该怎么办?可能存在转场异常?
它会抛出异常。您不能更改可序列化成员变量的类型。
开始=“4”>
- 是否有任何替代储蓄的方式大可序列化类,如果“模型”(即序列化类)被改变的数据将不会成为腐败?
你需要学习Versioning chapter of the Object Serialization Specification,所有这些问题的答案。