代码之家  ›  专栏  ›  技术社区  ›  Nrj

序列化和版本ID

  •  1
  • Nrj  · 技术社区  · 15 年前

    请帮助澄清疑问:

    在进行序列化时,如果已将版本ID定义为

    static final long serialVersionUID = 2L; ,并且由于这是静态的,所以在将对象存储到持久性介质时不应进行序列化。

    从持久介质中读取对象时,对象如何匹配versionID,因为反序列化对象不应包含它。

    2 回复  |  直到 15 年前
        1
  •  7
  •   skaffman    15 年前

    序列化运行时添加类的 serialVersionUID 对于对象流,它不会被视为“普通”实例字段。这一切都是在掩盖之下发生的。

        2
  •  1
  •   adsk    15 年前

    serialversionuid是__static fields don__t get serialized__规则的一个例外。每次将serialversionID的值写入输出流时,ObjectOutputStream都会写入。objectinputstream将其读回,如果从流中读取的值与类的当前版本中的serialversionID值不一致,则抛出invalidClassException。此外,如果在要序列化的类中没有正式声明的serialversionID,编译器会自动添加一个基于类中声明的字段生成的值。

    参考: http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html