天天看點

java序列化架構對比

二進制序列化架構

  • jdk 自帶對象序列化類ObjectInput(Out)Stream

1.無法跨語言。這應該是java序列化最緻命的問題了。由于java序列化是java内部私有的協定,其他語言不支援,導緻别的語言無法反序列化,這嚴重阻礙了它的應用。

2.序列後的碼流太大。java序列化的大小是二進制編碼的5倍多!

3.序列化性能太低。java序列化的性能隻有二進制編碼的6.17倍,可見java序列化性能實在太差了。

  • google的Protobuf

1支援java,C++,Python三種語言。

2需要中間語言靜态編譯

  • faceBook的Thrift

1.Thrift支援多種語言(C++,C#,Cocoa,Erlag,Haskell,java,Ocami,Perl,PHP,Python,Ruby,和SmallTalk)

2 自帶rpc , 直接可以釋出服務

3 和底層的rpc 架構連接配接太緊密,無法單獨作為一個序列化架構來用。

4 需要中間語言靜态編譯

  • kryo

1.速度快,序列化後體積小

2.跨語言支援較複雜

3 不向前向後相容

  • hessian

1.預設支援跨語言

2.較慢

3 不向前向後相容

  • fst

fst是完全相容JDK序列化協定的系列化架構,序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右。

序列化成json

  • 開源的Jackson

相比json-lib架構,Jackson所依賴的jar包較少,簡單易用并且性能也要相對高些。而且Jackson社群相對比較活躍,更新速度也比較快。Jackson對于複雜類型的json轉換bean會出現問題,一些集合Map,List的轉換出現問題。Jackson對于複雜類型的bean轉換Json,轉換的json格式不是标準的Json格式

  • Google的Gson

Gson是目前功能最全的Json解析神器,Gson當初是為因應Google公司内部需求而由Google自行研發而來,但自從在2008年五月公開釋出第一版後已被許多公司或使用者應用。Gson的應用主要為toJson與fromJson兩個轉換函數,無依賴,不需要例外額外的jar,能夠直接跑在JDK上。而在使用這種對象轉換之前需先建立好對象的類型以及其成員才能成功的将JSON字元串成功轉換成相對應的對象。類裡面隻要有get和set方法,Gson完全可以将複雜類型的json到bean或bean到json的轉換,是JSON解析的神器。

Gson在功能上面無可挑剔,但是性能上面比FastJson有所差距。

  • 阿裡巴巴的FastJson

Fastjson是一個Java語言編寫的高性能的JSON處理器,由阿裡巴巴公司開發。無依賴,不需要例外額外的jar,能夠直接跑在JDK上。FastJson在複雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型,導緻Json轉換出錯,需要制定引用。FastJson采用獨創的算法,将parse的速度提升到極緻,超過所有json庫。