实现序列化的java类中的serialVersionUID的作用

1、serialVersionUID 的作用

JAVA 序列化的机制是通过判断类的 serialVersionUID 来验证的版本一致的。序列化操作时会把系统当前类的 serialVersionUID 写入到序列化文件中,在进行反序列化时,JVM 会把传来的字节流中的 serialVersionUID 与本地相应实体类的 serialVersionUID 进行比较。如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本一致的异常,即 InvalidCastException。

2、serialVersionUID 的生成方式

1)一是默认的1L,比如:private static final long serialVersionUID = 1L;  
2)二是根据包名,类名,继承关系,非私有的方法和属性,以及参数,返回值等诸多因子计算得出的,极度复杂生成的一个64位的哈希字段。基本上计算出来的这个值是唯一的。比    如:private static final long  serialVersionUID = xxxxL;当实现 java.io.Serializable 接口中没有显示的定义 serialVersionUID 变量的时候,JAVA 序列化机制会根据 Class 自动生成一个 serialVersionUID 作序列化版本比较用,这种情况下,如果 Class 文件(类名,方法明等)没有发生变化(增加空格,换行,增加注释等等),就算再编译多次,serialVersionUID 也不会变化。

3、serialVersionUID 的兼容性

如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,就需要显示地定义一个 serialVersionUID,类型为 long 的变量。不修改这个变量值的序列化实体,都可以相互进行序列化和反序列化。

参考:

1)java类中serialVersionUID的作用

原文地址:https://www.cnblogs.com/GjqDream/p/11632372.html