加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 07:27:54 所属栏目:Java 来源:网络整理
导读:1、serialVersionUID 的作用 JAVA 序列化的机制是通过判断类的 serialVersionUID 来验证的版本一致的。序列化操作时会把系统当前类的 serialVersionUID 写入到序列化文件中,在进行反序列化时,JVM 会把传来的字节流中的 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的作用

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读