Java——关于序列化和反序列化的三问?

Java的序列化和反序列化是什么?

序列化:把Java对象转换成成字节序列的过程
反序列化:与序列化相对,把字节序列转换成对象的过程

为什么需要序列化和反序列化?

  • 对象的持久化
    众所周知,java的对象是存放在堆内存中,如果JVM停机,那么堆内存就不复存在了,而对象也随之消失了,为了能在JVM停机的情况下,Java对象能够保留下来,便引入了序列化的概念,将Java对象转换成字节序列保存在文件中,当需要该对象中,便从对应的文件中取出字节序列然后反序列化为对象。

  • 方便网络传输
    对于对象、文件、数据有许多格式,难以统一保存和传输,引入了序列化概念,这些格式的数据都转换为字节流了,都变成了一种东西,就可以用通用的方式进行保存和传输,等到使用时通过反序列化进行还原

为什么需要serialVersionUID并指定值?

  • serialVersionUID的引入可以理解为对对象进行版本控制(重点在version单词),在进行反序列化时会将serialVersionUID和本地对应实体类的serialVersionUID进行比较,如果不一致,则反序列化不通过。
  • 为啥serialVersionUID需要指定值呢?因为如果不指定值,JVM在序列化和反序列化时都会自动生成一个serialVersionUID,这样的话序列化生成的serialVersionUID和反序列化生成serialVersionUID不一致就会反序列化失败!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值