序列化serialVersionUID

本文详细解释了serialVersionUID的作用及其重要性。对于实现Serializable接口的类,serialVersionUID用于确保序列化对象的版本一致性。若未显式定义,JVM会自动生成,但类的任何改动都可能导致serialVersionUID变化,从而在反序列化时引发错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、为什么要使用serialVersionUID
(1)对于实现了Serializable接口的类,可以将其序列化输出至磁盘文件中,同时会将其serialVersionUID输出到文件中。
(2)然后有需要使用时,再从磁盘将对象内容及serialVersionUID读入内容中的某个对象。
(3)将磁盘内容读入对象时,需要进行强制类型转换,如Person person = (Person)ois.readObject();
(4) 此时,将对比从磁盘读入的Serializable与对象所属类(如Person)的Serializable,若二者一致,则转换成功。若二者不一致,则转换失败,并抛出InvalidClassException。
如果没有为类指定serialVersionUID,则JVM会自动根据类的内容生成一个serialVersionUID,类中的任何变化均会导致serialVersionUID的变化,如新增一个空格。
因此,若一个类没有指定serialVersionUID,而且发生了变化,则读取磁盘中的对象时就会报错。

个人见解:我认为平常开发过程中没有必要添加serialVersionUID 因为该类可能会存在改变,最好是在发布到容器前统一生成,再一个除非兼容,否则也没必要添加,强迫症晚期者请忽略。

原文:http://blog.youkuaiyun.com/jediael_lu/article/details/26813153

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值