首页 > 编程语言 > 详细

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

时间:2019-10-07 22:38:24      阅读:105      评论:0      收藏:0      [点我收藏+]

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的作用

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!