序列化

想必大家都听过序列化或者是反序列化,为什么要序列化呢?如果不序列化会出现什么问题,序列化了有什么好处呢,有哪些序列化的方式呢,在本次分享中都会一一解答。

1:什么是序列化/反序列化

序列化:将 Java 对象转换成字节流的过程。

反序列化:将字节流转换成 Java 对象的过程。

2:序列化解决了什么问题?

试想在多个系统中的数据交互,A系统部署在a机器上,B系统部署在b机器上,A系统调用B系统的某一个RPC接口的时候,那会B系统返回给A系统返回的数据是不是需要传输,这个就涉及到了网络传输了,在网络传输上都是使用二进制流(对没错,就是传说中010011010110)这个东西,如果没有序列化,那么信息将不能传输。所以序列化解决了数据在网路上传输载体的问题。

接口调用流程图

3:有哪些序列化方式

下面简单介绍几种

1:java自带的

性能一般,操作起来比较简单

2:fastjson(拓展的,文档形的)

3:(dubbo框架里面的一些)自定义的

4:序列化方式选择

说到选择又是一个比较尖锐的话题了,这个就要看目前所在的系统是什么样子的,如果一个简单系统,只需要存储一些内部员工的信息之类的,因为员工数量的数量级是可控的,在存储的时候基本上是不用考虑内存(如果做缓存的话的--redis)等问题的,就往redis里头直接存对象的json,也不失为一种优雅的方式。如果涉及到存储的数据量比较多,key的个数的数量级比较大的话,而且value就要考虑到序列化的方式了,怎样一种编码方式可以使得value的占用空间最小,就要考虑到序列化方式了,这里就RedisTemplate里头的稍微展开讨论下,我们的业务场景缓存的数据比较多,然后查阅各种资料,最后选中了KryoRedisSerializer,这种性能比较高的,实现方式也比较简单,参考http://www.shenyanchao.cn/blog/2019/02/13/redis-serializer/, 如下

重写序列化接口


重写反序列化接口
配置新的序列化方式


使用  pipeline的方式

当然了,还可以自己去实现哈夫曼编码的方式来编码的传递的信息,这个和Netty中的加解码器如出一辙,就是玩各种handler咯,到这里就结束了,欢迎留言,关注,交流~~~

你可能感兴趣的:(序列化)