Java对象序列化...它是多余的和强大的?

Java对象序列化...它是多余的和强大的?

问题描述:

我有几件事情我想要澄清一下:Java对象序列化...它是多余的和强大的?

当存储难以存储的数据时,对象序列化非常方便。你使用一个SerialVersionUUID类,然后你可以阅读&。如果:

  1. 我在可序列化类中添加一个新变量,以便旧的可序列化对象不具有此变量?它是否仍然会加载并保留未初始化的变量,或者是否会抛出异常,从而使序列化对象无法使用?
  2. 如果我更改SerialVersionUUID,该怎么办? “过时的”序列化对象将不再加载?有没有一种方法可以轻松地转换它们,或者是否有定制系统来实现这一点?
  3. 如果我改变一个已经存在的变量类型该怎么办?可能存在转场异常?
  4. 是否有节约的大序列化类的方式,如果“模型”(即序列化类)中的数据不会被损坏任何的替代品被改变?

先感谢您的回答这个问题。如果问题不好,我很抱歉。他们刚刚想到我想知道更多关于它的信息。

环顾四周张贴礼仪问多个问题中的一个职位后不禁止也不皱眉。唯一的风险是得到不正确的答案。

Java对象序列化...是多余的

和强大?

它在规范中定义的约束条件下对类的版本控制是相当健壮的。对于“健壮”的任何其他价值,您需要定义您的条款。

  1. 我在序列化类中添加一个新的变量使旧的序列化对象没有这个变量?它是否仍然会加载并保留未初始化的变量,或者是否会抛出异常,从而使序列化对象无法使用?

它将使变量未初始化。

  1. 如果更改SerialVersionUUID,该怎么办?

它会抛出InvalidClassException.

的 “过时” 的序列化对象将不再加载?

见上文。

有没有一种方法可以很容易地转换它们,或者是否有定制系统来实现这一点?

不道德:不改变serialVersionUID。与在互联网上发现的许多善意但不知情的观点相反,这表明例如在每个修订版上改变它。 决不改变它,除非你专门希望引起InvalidClassException

  1. 如果我更改已存在的变量类型该怎么办?可能存在转场异常?

它会抛出异常。您不能更改可序列化成员变量的类型。

  1. 是否有任何替代储蓄的方式大可序列化类,如果“模型”(即序列化类)被改变的数据将不会成为腐败?
开始=“4”>

你需要学习Versioning chapter of the Object Serialization Specification,所有这些问题的答案。