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序列化
它基於HTTP協議傳輸,使用Hessian二進制序列化,對於數據包比較大的情況比較友好。
5、Avro序列化
Avro序列化設計初衷是爲了支持大批量數據交換的應用,支持二進制序列化方式,並且自身提供了動態語言支持,可以更加便捷、快速處理大批量的Avro數據
6、Kyro序列化
Kyro序列化是主流的比較成熟的序列化方案之一,目前廣泛使用在大數據組件中,比如Hive、Storm等,性能比起Hessian還要優越,但是缺陷較明顯,不支持跨語言交互,在dubbo2.6.x版本開始已經加入了Kyro序列化的支持
7、Protobuf序列化
Protobuf是谷歌提出的序列化方案,不同的是此方案獨立於語言、平臺,谷歌提供了多個語言如java、c、go、python等語言的實現,也提供了多平臺的庫文件支持,使用比較廣泛,優點在於性能開銷很小,壓縮率很高,但是缺陷也很明顯,可讀性很差,並且protobuf需要使用特定語言的庫進行翻譯轉換,使用起來較爲麻煩
===================================================
===================================================
業餘時間不定期更新一些想法、思考文章,歡迎關注,共同探討,沉澱技術!