为什么对象序列化要定义serialVersionUID

Posted 栗霖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么对象序列化要定义serialVersionUID相关的知识,希望对你有一定的参考价值。

对于实现了java.io.Serializable接口的实体类来说,往往都会手动声明serialVersionUID,因为只要你实现了序列化,java自己就会默认给实体类加上一个serialVersionUID。

java默认添加的serialVersionUID是会根据实体类的成员(成员变量,成员方法)变化而变化的。

为什么要显示声明一个serialVersionUID呢?

当我们把实体类序列化到本地后,如果实体类的成员发生了变化,默认添加的serialVersionUID就会发生变化。此时硬盘上序列化对象的serialVersionUID与实体类中的serialVersionUID对不上,就会反序列化失败爆出异常:

Exception in thread “main” java.io.InvalidClassException: Person; local class incompatible: stream classdesc serialVersionUID = 8383901821872620925, local class serialVersionUID = -763618247875550322 

所以,通常对于实现了SerialVersionUID接口的实体类来说,都会手动声明serialVersionUID。

private static final long serialVersionUID = 1L;

通过上述代码即可实现。

以上是关于为什么对象序列化要定义serialVersionUID的主要内容,如果未能解决你的问题,请参考以下文章

redis存储对象与对象序列化详解

什么时候一定要implement Serializable?

java问题 如图,集合序列化的报错要怎么改呢?写入文件和读取对象的代码都在图里了,哪写错了,求大神

Java实体对象为什么要实现Serializable接口?

在java中啥叫做类的序列化

什么是对象序列化,为什么要使用