分布式系统的基石--序列化以及反序列化
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)序列化实现深克隆