分布式系统的基石--序列化以及反序列化

本文深入探讨Java序列化的意义、挑战及其实现机制。解析序列化与反序列化的过程,讨论序列化数据大小与系统开销的问题。揭示serialVersionUID的作用,以及如何利用序列化实现深克隆。

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

1.序列化的意义

序列化:就是把对象变为可存储或者可传输的形式过程---》把对象转化为字节序列

反序列化:就是序列化的逆向过程,把字节序列恢复为对象

2.序列化面临的挑战

序列化的俩个重要指标:1.序列化以后数据的大小 2.序列化操作对本身操作系统的开销

java语言本身对序列化提供了支持,也是java语言本身最重要的底层机制之一,java本身提供了序列化机制存在俩个问题

1.序列化之后的数据比较大,传输效率比较低 2.其它语言无法识别和对接

具体实现:

1)自定义一个接口,里面有序列化以及反序列化方法

2)实现类 序列化以及反序列化 

3.序列化的高阶认识

1)serialVersionUID 的作用

Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的,在进行反序列化的时候,jvm会把字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同就认为是一致的,就进行反序列化,否则就会出现序列化版本不一致的异常,即 是 InvalidCastException!

如果没有为指定的类配置serialVersionUID,java编译器会自动给这个class进行一个摘要算法,类似于指纹算法,只要这个文件有任何改动,这个serialVersionUID就会截然不同,可以保证在这么多类中,这个编号是唯一的,除非类名方法名发生变化,才会发生变化,否则(就算注释再怎么变化),serialVersionUID也不会发生变化。

2)静态变量序列化

 

 3).父类的序列化

如果一个子类继承了父类,子类本身实现了序列化,而父类没有实现序列化,那么进行反序列化的时候,父类中的属性为 null

4).Transient 关键字

Transient 关键字的作用是控制变量的序列化,在变量声明前加上该关 键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null

绕开 transient 机制的办法(一般不经常使用)

5)序列化实现深克隆

11)浅克隆:

22)序列化实现深克隆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值