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