Java中的serialVersionUID

时间:2012-06-12 08:25:23

标签: java serialization

  

可能重复:
  Serialization version uid in Java

我们知道Java序列化机制会忽略静态字段。如果是这样,那么解串器如何知道序列化器的serialVersionUID。 serialVersionUID始终是要序列化的类的静态字段。谢谢你的帮助。

3 个答案:

答案 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接口的类的字节代码。