序列化 反序列化 serialVersionUID

问题1:序列化是什么?

答:就是java把一个类的实体化的对象存到硬盘,或传给千里之外的另一个人。就是把抽象的对象,存成一定的格式放到硬盘里。比如json的数据形式 算是键值对的形式,也是一种序列化的格式。大概就是这么个意思。

问题2:我不实现serializable接口行不行,一个空接口,你让我实现,逗我呢?

答:不行,序列化执行源码里进行了判定,三种类型:数组,Enum,serializable,不是这三个,不好意思,不给你序列化。为啥,不为啥,就像买包子,需要排队,你不排队,我不卖给你。序列化源代码如下:

问题3:我写了个类,好吧,我给你个面子实现serializable接口,但是,我就不写serialVersionUID,怎么着吧,我照样可以序列化,照样可以反序列化。

答:嗯,是可以不写这个serialVersionUID,你序列化了,也可以反序列化,但是有一个问题,你写了个类,今天你生成个对象存到硬盘中。明天你心情好,加个了个属性,想起昨天的那个对象,你想从硬盘中拿出来,一拿,报错,说serialVersionUID不一致,这是为啥?因为,你虽然类中没写serialVersionUID,系统说,好,你没写,我给你写一个。擦,写进去了。你拿的时候,带着类过来了,系统一看,你的类胖了1斤,根据规则生成了一个serialVersionUID值,多少呢,假如是2,为啥变了,因为你加东西了,所以根据规则生成的这个值就变了。一比对,不一样,系统说,你走吧,不是同一个人。然后就凉凉了。所以,如果类没有变,ok,给你存给你取。如果存的时候和拿的时候类变了,那就只给存不给拿了。说白了,就是控制版本的作用。所以,String里的这个UID的值,历经几代都不变。反序列化源码如下:
在这里插入图片描述
这个图片代码就是如果你没有UID,系统给你创建一个
在这里插入图片描述

问题4:哎呀,这个serialVersionUID的字段好长呀,行吧,我写,但是我不叫这个名字,我叫a,叫b,叫c,不叫这么长行不行?

答:不行。为啥,因为系统拿的时候,就拿这个名字的属性的值,写死了。你不叫这个名字,系统怎么知道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值