常見的序列化框架

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需要使用特定語言的庫進行翻譯轉換,使用起來較爲麻煩

 

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

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

業餘時間不定期更新一些想法、思考文章,歡迎關注,共同探討,沉澱技術!

            

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