为什么序列化需要在实现类中使用串行版本UID ?
From doc for java.ioSerializable
:
序列化运行时与每个可序列化类关联一个版本号,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送方和接收方是否为该对象加载了与序列化兼容的类。如果接收方为对象加载了一个类,该类的serialVersionUID与相应发送方类的serialVersionUID不同,那么反序列化将导致
InvalidClassException
。可序列化的类可以通过声明一个名为"serialVersionUID"
的字段显式地声明自己的serialVersionUID,该字段必须是静态的、final的,并且类型为long
您是否在问为什么要使用UID ?
因此它知道两个序列化的对象是否相互兼容。你可能已经改变了接口/方法等。
UID是一个(无可否认相当蹩脚的)契约,它表明这两个对象实际上是相同类型的对象。
为什么序列化需要serial version UID in implemented课吗?
它根本不需要它。
serialVersionUID在Serializable类中用作版本控制。如果您没有显式声明serialVersionUID, JVM将根据您的Serializable类的各个方面自动为您做,如Java(TM)对象序列化规范中所述。