可能重复:
Java 中的序列化版本 uid
我们知道Java序列化机制忽略静态字段。如果是这样,那么反序列化器如何知道序列化器的serialVersionUID。serialVersionUID 始终是要序列化的类的静态字段。感谢您的帮助。
程
可能重复:
Java 中的序列化版本 uid
我们知道Java序列化机制忽略静态字段。如果是这样,那么反序列化器如何知道序列化器的serialVersionUID。serialVersionUID 始终是要序列化的类的静态字段。感谢您的帮助。
程
被serializedVersionUID
写入流,即使它是静态的。
然后将其用于反序列化,以将其与当前可用版本的类进行比较。
请注意,它不是作为每个实例的一部分编写的,而是作为“ObjectStreamClass”的一部分,它为流中想要使用它的所有实例定义类。
Class
被反序列化的是所有Classpath
数据都是已知的。
更新(感谢@Thilo):
"and equally importantly, the serializedVersionUID is written to the stream, even though it is static." – Thilo
serialVersionUID
从“序列化”对象的未存储实例的类中检索。如果已定义,则将其“存储”在已编译的字节码中,否则将使用某种算法进行计算。
请参阅下面实现Serializable
接口的类的字节码。