gpt4 book ai didi

java - Java中的序列化版本uid

转载 作者:行者123 更新时间:2023-12-03 02:28:31 25 4
gpt4 key购买 nike

序列化id如何存储在对象的实例中?

我们在Java中声明的Serialization id是静态字段;静态字段不会被序列化。

那么应该有某种方法来存储静态最终字段。 java是怎么做到的?

最佳答案

serialVersionUID 不存储在“序列化”对象的实例中,因为它是静态字段(它是类的一部分,而不是对象的一部分)。

因此,如果实际定义了它,则将其存储在编译的字节码中,否则进行计算。在 java specification的话:

If the class has defined serialVersionUID it is retrieved from the class. If the serialVersionUID is >not defined by the class, it is computed from the definition of the class in the virtual machine. If >the specified class is not serializable or externalizable, null is returned.

Stream Unique Identifiers section ,解释了这种计算的算法。

这一段值得注意(这就是为什么当实现 Serialized 的类没有显式定义serialVersionUID 时,IDE 通常会显示警告)。

注意:强烈建议所有可序列化类显式声明serialVersionUID值,因为默认serialVersionUID计算对类详细信息高度敏感,可能会因编译器实现而异,因此可能会在反序列化过程中导致意外的serialVersionUID冲突,从而导致反序列化失败。

关于java - Java中的序列化版本uid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com