Java对象序列化。。。它是冗余的和健壮的吗?

Java对象序列化。。。它是冗余的和健壮的吗?,java,serialization,Java,Serialization,我有几件事需要澄清: 在存储难以存储的数据时,对象序列化非常方便。您使用带有SerialVersionUID的类,然后可以对其进行读写。如果: 我在serializable类中添加了一个新变量,以便旧的serializable对象没有这个变量?它仍然会加载并保持变量未初始化,还是会抛出异常,使序列化对象不可用 如果我更改SerialVersionUID怎么办?“过时”的序列化对象将不再加载?是否有一种方法可以轻松地转换它们,或者是否有一个定制的系统可以做到这一点 如果我更改一个已经存在的变量类型

我有几件事需要澄清:

在存储难以存储的数据时,对象序列化非常方便。您使用带有SerialVersionUID的类,然后可以对其进行读写。如果:

  • 我在serializable类中添加了一个新变量,以便旧的serializable对象没有这个变量?它仍然会加载并保持变量未初始化,还是会抛出异常,使序列化对象不可用
  • 如果我更改SerialVersionUID怎么办?“过时”的序列化对象将不再加载?是否有一种方法可以轻松地转换它们,或者是否有一个定制的系统可以做到这一点
  • 如果我更改一个已经存在的变量类型怎么办?可能有铸造例外
  • 除了保存大的可序列化类之外,还有其他方法吗?如果“模型”(即可序列化类)被更改,数据将不会损坏
  • 提前感谢您的回答。如果问题不好,我道歉。我刚想起它们,我想知道更多

    环顾四周后,在一篇文章中提出多个问题的礼仪是不被禁止的,也不被反对的。唯一的风险是得到错误的答案

    Java对象序列化。。。是多余的吗

    没有

    而且强壮

    在其规范中定义的约束范围内,它对类版本控制具有相当强的鲁棒性。对于“健壮”的任何其他值,您需要定义术语

  • 我在serializable类中添加了一个新变量,以便旧的serializable对象没有这个变量?它仍然会加载并保持变量未初始化,还是会抛出异常,使序列化对象不可用
  • 它将使变量未初始化

  • 如果我更改SerialVersionUID怎么办
  • 它将抛出InvalidClassException。

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

    见上文

    是否有一种方法可以轻松地转换它们,或者是否有一个定制的系统可以做到这一点

    不。寓意:不要更改
    serialVersionUID
    。与你会在互联网上发现的许多善意但不知情的意见相反,这意味着,例如,在每一次修订中都要对其进行修改除非您特别地想要引起
    InvalidClassException
    ,否则不要更改它

  • 如果我更改一个已经存在的变量类型怎么办?可能有铸造例外
  • 它将抛出一个异常。无法更改可序列化成员变量的类型

  • 除了保存大的可序列化类之外,还有其他方法吗?如果“模型”(即可序列化类)被更改,数据将不会损坏
  • 你需要研究这些问题的答案