Java序列化机制(2)- serialVersionUID 实验

转载请注明博客地址:http://blog.csdn.net/suileisl


serialVersionUID分为固定的某个long型值(1L)或者生成一个serialVersionUID。本文主要关注生成的serialVersionUID。

1. 验证-添加属性和方法生成的serialVersionUID不同

其中变量设置为不同作用域,是为了在序列化和反序列化过程中进行比对。

{CSDN:CODE:85280}

2. 验证-序列化对象到文件并从文件反序列化对象到内存
{CSDN:CODE:85297}
其控制台输出结果如下图:


生成的temp.out文件内容截图如下:


从上面的截图可以看出,序列化时将对象的包、属性值等都写入了对象流中。

3. 验证-反序列化不同serialVersionUID的对象,产生异常
{CSDN:CODE:85316}
控制台输出如下所示:


4. 验证-反序列化如果添加字段、方法但不改变serialVersionUID,不会异常,但无法获取对象的相应值
1)注释掉实验1中 j var等属性以及相应方法。
2)运行实验2中的代码,产生对象流的同时,输出i的值1。
3)打开实验1中的注释掉的代码。
4)注释实验2中写对象流的代码。
5)运行注释后的实验2代码。
产生的控制台输出如下:

与实验2相比,值类型j输出的是默认初始值0,而对象类型的String var输出的是null。

另外, 接口实现方式下的序列化和继承关系下的序列化也和上述情况类似,在实验源码包中都有实现,请参看。




作者简介 
昵称:根根
姓名:隋磊
QQ:522173163
email:rsuilei@126.com 
相关博客内容,离不开《至高天》系统架构师团队的支持 
猫头哥:http://phl.iteye.com/ 
根根:http://blog.csdn.net/suileisl 
芝麻的奋斗:http://sesame84.iteye.com/ 
wan560:http://blog.csdn.net/wan560/ 
terrily:http://terrily.iteye.com/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值