为什么对象序列化要定义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 条评论
登录 后参与评论

相关文章

来自专栏数据处理

提交任务到集群

1512
来自专栏浪淘沙

SparkStreaming_Kafka_Redis整合

2043
来自专栏伦少的博客

Spark性能优化:基于分区进行操作

基于分区对数据进行操作可以让我们避免为每个数据元素进行重复的配置工作。诸如打开数据库连接或创建随机数生成器等操作,都是我们应当尽量避免为每个元素都配置一次的工作...

1701
来自专栏别先生

Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、

1:什么是Spark的RDD??? RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代...

35010
来自专栏行者悟空

Spark RDD的Transformation

924
来自专栏浪淘沙

Spark Core 学习笔记

1:Spark Core:内核,也是Spark中最重要的部分,相当于Mapreduce                 SparkCore 和 Mapredu...

2212
来自专栏小小挖掘机

PySpark之RDD入门最全攻略!

众所周知,Spark的核心是RDD(Resilient Distributed Dataset)即弹性分布式数据集,属于一种分布式的内存系统的数据集应用。Spa...

1.5K6
来自专栏牛肉圆粉不加葱

如何保证一个Spark Application只有一个SparkContext实例

Spark有个关于是否允许一个application存在多个SparkContext实例的配置项, 如下:

813
来自专栏Spark生态圈

[spark] RDD解析

每个具体的RDD都得实现compute 方法,该方法接受的参数之一是一个Partition 对象,目的是计算该分区中的数据。 我们通过map方法来看具体的实现...

881
来自专栏Albert陈凯

4.2 创建RDD

4.2 创建RDD 由于Spark一切都是基于RDD的,如何创建RDD就变得非常重要,除了可以直接从父RDD转换,还支持两种方式来创建RDD: 1)并行化一个...

3079

扫码关注云+社区