Serializable:serialVersionUID

原创 2015年07月08日 10:05:05

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。

可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

如果可序列化类未显式声明 serialVersionUID,则序列化运行时将基于该类的各个方面计算该类的默认 serialVersionUID 值,如“Java(TM) 对象序列化规范”中所述。不过,强烈建议 所有可序列化类都显式声明 serialVersionUID 值,原因是计算默认的 serialVersionUID 对类的详细信息具有较高的敏感性,根据编译器实现的不同可能千差万别,这样在反序列化过程中可能会导致意外的 InvalidClassException。因此,为保证 serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。还强烈建议使用 private 修饰符显示声明 serialVersionUID(如果可能),原因是这种声明仅应用于直接声明类 – serialVersionUID 字段作为继承成员没有用处。

这段是从api文档copy过来的,黑体的部分,是我认为需要关注的几个点。

Serializable中的serialVersionUID到底有啥用

最近在研究跨进程通信的问题,于是又再一次研究了,我们熟悉而又陌生的Serializable接口。 那么好,做过Java开发的朋友肯定对这个接口不陌生吧,Java中就是通过这个接口,来实现了序列化和反...
  • namePeng
  • namePeng
  • 2015-11-21 21:46:57
  • 5362

序列化Serializable serialVersionUID的作用

序列化Serializable的方式特别简单 实现Serializable接口,再在类中声明如下这一个属性即可。 private static final long serialVersionUID ...
  • lazyer_dog
  • lazyer_dog
  • 2016-06-14 16:08:51
  • 1835

Intellij Idea 12 生成serialVersionUID的方法

默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告。如果需要ide提示生成serialVersionUID,那么需...
  • Arthur0088
  • Arthur0088
  • 2013-12-18 10:01:37
  • 19735

Android studio实现Serializable自动生成serialVersionUID

设置Android studio实现Serializable自动生成serialVersionUID步骤:File–>Settings–>Editor–>Inspections–>Java–>Seri...
  • jeek_job
  • jeek_job
  • 2016-08-27 10:12:48
  • 5807

Java Serializable序列化,反序列化 ,serialVersionUID的作用

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。如此可以把对象转换成字节流,可以进行网络传输,保持到本地文件,数据库等,增加对象的生命周...
  • chenchaofuck1
  • chenchaofuck1
  • 2016-03-07 16:31:28
  • 1912

Serializable序列化接口serialVersionUID的理解

下面是一个显式声明了serialVersionUID的例子: 在序列化和反序列化的代码中都有一个实现了Serializable 的User类; public class User implemen...
  • edward_leo
  • edward_leo
  • 2016-03-10 21:59:33
  • 2757

Android Studio类中实现Serializable自动生成serialVersionUID

Android Studio类中实现Serializable自动生成serialVersionUID 1、File -> Settings... -> Editor -> Inspect...
  • qq_24800377
  • qq_24800377
  • 2017-06-26 13:11:17
  • 649

Android Studio 自动生成 serialVersionUID

http://stackoverflow.com/questions/12912287/intellij-idea-generating-serialversionuid 勾上就OK了!~F...
  • zhangxiweicaochen
  • zhangxiweicaochen
  • 2013-10-16 16:44:12
  • 22518

serializable 类 XXXX 未声明类型为 long 的静态终态 serialVersionUID 字段

这涉及到序列化机制的问题,序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。当把对象写进流里就会根据此机制生成一个相应的序号,从流里读取对象时就根据这个序号来检查对象的完整性,生...
  • lwklhm
  • lwklhm
  • 2017-01-09 20:43:05
  • 1565

JavaBean (实现 Serializable(可序列化) 接口的类) 里 serialVersionUID 的作用

serialVersionUID作用:         序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 有两种生成方式:        一个是默认的1L,比如:pr...
  • Tuzki_520
  • Tuzki_520
  • 2014-11-26 15:15:00
  • 1268
收藏助手
不良信息举报
您举报文章:Serializable:serialVersionUID
举报原因:
原因补充:

(最多只允许输入30个字)