serialVersionUID 有何用途?
参考:serialVersionUID 有何用途? 如果没定义会有什么问题?
回答
-
虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致,即serialVersionUID要求一致。
在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,
如果,相同就认为是一致的,可以进行反序列化。
否则,就会出现序列化版本不一致的异常,即是InvalidClassException。
最佳实践:明确的定一个serialVersionUID
-
类一旦实现了 Serializable,就建议明确的定义一个serialVersionUID。不然在修改类的时候,就会发生异常。
-
serialVersionUID 两种显示的生成方式:
- 默认的1L,比如:private static final long serialVersionUID = 1L;
- 根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = xxxxL;