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

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)序列化实现深克隆

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

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

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