常见的序列化框架

1、概念

序列化是指把对象转换为字节序列的过程。

反序列化是指把字节序列恢复为对象的过程。

序列化一般用在,将对象中包含的数据字段,转换成字节序列,进行发送或存文件(一般是串行)。

反序列化一般用在,收到或读取的字节序数据,需要将其还原成对象。

常见的序列化方式有XML序列化、JSON序列化、Hessian序列化、Avro序列化、Kyro序列化、Protobuf序列化。

2、XML序列化

xml协议,良好的可读性,自由度极高的扩展性,成了很长一段时间的序列化标准规范;

可以说xml序列化是开发中最常见也是发展时间最久的协议,并且支持跨进程和跨语言交互。

但是缺陷也很明显,即xml规范下的每一个属性和值都是固定的标签形式,导致序列化后的字节流文件很大,

而且解析复杂,效率很低。

方案:最常见的是XStream 和 Java 自带的 XML 序列化和反序列化两种

3、JSON序列化

xml序列化发展了多年后,也浮现了一些问题,比如开发并不简便,解析xml复杂度较高,还有xml的标准规范比较多,自由度过高,导致很难有效的指定格式校验等,于是一种新的轻量级的序列化交互的方案--JSON(JavaScript Object Notation)出现了,相对于xml来说,json格式语法简单,自由度较高,有很高的可读性,并且在JSON序列化后的字节流小于xml序列化的结果,解析起来更方便,于是基于JSON的接口成了新的标准规范之一。

方案:最常见的Jackson、阿里巴巴开源的FastJson、谷歌的GSON

4、Hessian序列化

简单说来,Hessian是一个轻量级的RPC框架。

它基于HTTP协议传输,使用Hessian二进制序列化,对于数据包比较大的情况比较友好。

5、Avro序列化

Avro序列化设计初衷是为了支持大批量数据交换的应用,支持二进制序列化方式,并且自身提供了动态语言支持,可以更加便捷、快速处理大批量的Avro数据

6、Kyro序列化

Kyro序列化是主流的比较成熟的序列化方案之一,目前广泛使用在大数据组件中,比如Hive、Storm等,性能比起Hessian还要优越,但是缺陷较明显,不支持跨语言交互,在dubbo2.6.x版本开始已经加入了Kyro序列化的支持

7、Protobuf序列化

Protobuf是谷歌提出的序列化方案,不同的是此方案独立于语言、平台,谷歌提供了多个语言如java、c、go、python等语言的实现,也提供了多平台的库文件支持,使用比较广泛,优点在于性能开销很小,压缩率很高,但是缺陷也很明显,可读性很差,并且protobuf需要使用特定语言的库进行翻译转换,使用起来较为麻烦

 

===================================================

===================================================

业余时间不定期更新一些想法、思考文章,欢迎关注,共同探讨,沉淀技术!

            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章