关于JAVA序列化的几个问题

本文详细解析了Java序列化机制及其关键组成部分serialVersionUID的作用,通过实例展示了序列化过程中类版本兼容性的保障机制,并阐述了在实体类中添加serialVersionUID的重要性。
摘要由CSDN通过智能技术生成

今天突然接到淘宝的电话面试,问了一些问题,其中一个是关于Java序列化的

问题大概就是serialVersionUID的作用之类的吧,当时回答是凭感觉和经验回答的,后来通过测试,我的回答是正确的,这里再总结下序列化的问题

1.Java的序列化机制只序列化对象的属性值,而不会去序列化什么所谓的方法,列化机制只保存对象的类型信息,属性的类型信息和属性值,和方法没有什么关系,你就是给这个类增加10000个方法,序列化内容也不会增加任何东西。

2.对于需要序列化和反序列化的的实体,最好加上serialVersionUID,并不要随便更改其值。

       对于一个实体User好啦,实现了java.io.Serializable接口,但没有加上serialVersionUID,先实例化一个User对象并将它序列化到磁盘上,然后再反序列化,OK,这是没有问题的!看下面的:

       在User类里再增加一个属性,接着再将之前序列化的文件反序列化成User对象,报错!!!为何?就是因为没有加上serialVersionUID!

       如果User加上了serialVersionUID,给User增加属性后,再将之前序列化的文件反序列化回User对象,是没有问题的!!

3.总结

       serialVersionUID 用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义。

转载于:https://www.cnblogs.com/jadmin/archive/2010/04/24/2205992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值