serialVersionUID 到底是个啥?

71 阅读1分钟

serialVersionUID 有何用途?

参考:serialVersionUID 有何用途? 如果没定义会有什么问题?


回答

  • 虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致,即serialVersionUID要求一致。

    在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,

    如果,相同就认为是一致的,可以进行反序列化。

    否则,就会出现序列化版本不一致的异常,即是InvalidClassException。

最佳实践:明确的定一个serialVersionUID
  • 类一旦实现了 Serializable,就建议明确的定义一个serialVersionUID。不然在修改类的时候,就会发生异常。

  • serialVersionUID 两种显示的生成方式:

    1. 默认的1L,比如:private static final long serialVersionUID = 1L;
    2. 根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = xxxxL;