为什么序列化需要在实现的类中使用串行版本UID?

时间:2011-04-07 04:37:49

标签: java serialization

为什么序列化在实现的类中需要串行版本的UID?

4 个答案:

答案 0 :(得分:8)

来自the doc for java.ioSerializable

  

序列化运行时将每个可序列化类与版本号相关联,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送方和接收方是否已加载与该序列化兼容的该对象的类。如果接收者为对象加载了一个类,该类具有与相应发送者类不同的serialVersionUID,则反序列化将产生InvalidClassException。可序列化类可以通过声明名为"serialVersionUID"的字段来明确声明其自己的serialVersionUID,该字段必须是static,final和long类型

答案 1 :(得分:3)

你在问UID为什么会这样吗?

因此它知道两个序列化对象是否彼此兼容。您可能已经更改了接口/方法/等。

UID是(公认的相当蹩脚)合同,说这两个对象实际上是同一类型的对象。

答案 2 :(得分:2)

  

为什么序列化需要一个   串行版UID已实现   类?

根本不需要它。这是一个可选功能。

答案 3 :(得分:0)

serialVersionUID用作Serializable类中的版本控件。如果您没有显式声明serialVersionUID,JVM将根据您的Serializable类的各个方面自动为您完成,如Java(TM) Object Serialization Specification中所述。