Java 序列化和版本ID

Java 序列化和版本ID,java,serialization,Java,Serialization,请帮助澄清疑问: 在执行序列化时,如果已将版本id定义为 static final long serialVersionUID=2L,并且由于这是静态的,所以在将对象存储到持久介质时不应序列化 从持久介质读回对象时,对象如何匹配versionID,因为反序列化对象不应包含它 序列化运行时会自动将类的serialVersionUID添加到对象流中,而不是将其视为“普通”实例字段。这一切都发生在幕后。序列化运行时会自动将类的serialVersionUID添加到对象流中,而不是将其视为“普通”实例字

请帮助澄清疑问:

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

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


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

序列化运行时会自动将类的
serialVersionUID
添加到对象流中,而不是将其视为“普通”实例字段。这一切都发生在幕后。

序列化运行时会自动将类的
serialVersionUID
添加到对象流中,而不是将其视为“普通”实例字段。这一切都发生在幕后。

serialVersionUID是“静态字段不会序列化”规则的一个例外。ObjectOutputStream每次将serialVersionUID的值写入输出流时。ObjectInputStream将其读回,如果从流中读取的值与当前版本的类中的SerialVersionId值不一致,则抛出InvalidClassException。此外,如果要序列化的类中没有正式声明的serialVersionUID,编译器会自动添加一个基于类中声明的字段生成的值

参考:

serialVersionUID是“静态字段不序列化”规则的例外。ObjectOutputStream每次将serialVersionUID的值写入输出流时。ObjectInputStream将其读回,如果从流中读取的值与当前版本的类中的SerialVersionId值不一致,则抛出InvalidClassException。此外,如果要序列化的类中没有正式声明的serialVersionUID,编译器会自动添加一个基于类中声明的字段生成的值

参考: