为什么对象序列化要定义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;

通过上述代码即可实现。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏面朝大海春暖花开

springMVC接受对象集合,name数组

这两天开发遇到一个很常见的问题,即使自己一直没遇见过,不过之前看过是实现接受对象集合的代码,只不过没注意罢了

1072
来自专栏mathor

ObjectIo

 T类的成员中有一个transient修饰的变量,transient意思是透明的,打印时会打印其所属变量类型的默认值,double的默认值是0.0,如果给boo...

842
来自专栏静默虚空的博客

Java 枚举用法详解

概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。 在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下: ...

20710
来自专栏用户画像

腾讯面试题之词频统计

有一千万条短信,有重复,以文本文件的形式保存,一行一条,找出重复出现最多的前10条。

623
来自专栏Java技术分享

反射类的方法

关于对类的方法的反射。其中包括静态方法,普通方法,带参数的方法,以及最重要的String[]数组的方法的反射以及需要注意的细节问题,都是基础,所以请各位多多包涵...

1977
来自专栏SpringBoot

javabean 遍历

852
来自专栏ml

Java 基础知识点(必知必会其一)

如何将字符串转换为数字? 2.如何将数字转换为十六进制字符串? 1 package Day_2; 2 /** 3 * @author Admin...

2736
来自专栏ml

初学Java之Pattern与Matcher类

import java.util.regex.*; public class Gxjun{ public static void main(St...

2697
来自专栏别先生

struts2之OGNL和struts2标签库和ValueStack对象

OGNL简介:    (1)OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。     ...

1736
来自专栏个人随笔

Java IO流

package cn.bdqn.demo; import java.io.File; import java.io.FileInputStream; impo...

2606

扫码关注云+社区