java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能對比



咱們爲何要序列化

     舉個栗子:下雨天咱們要打傘,可是以後咱們要把傘摺疊起來,方便咱們存放。那麼運用到咱們java中道理是同樣的,咱們要將數據分解成字節流,以便存儲在文件中或在網絡上傳輸,這叫序列化。咱們要用的時候,就須要將字節流重構成對象,這叫反序列化。不知道我這麼說你們能不能理解。
javascript

java序列化的缺點

java本身提供序列化並且用起來也很是簡單,可是在遠程服務調用中不多用它,主要存在如下缺點:css

  
  
  
  
  1. 1.沒法跨語言。這應該是 java序列化最致命的問題了。因爲 java序列化是 java內部私有的協議,其餘語言不支持,致使別的語言沒法反序列化,這嚴重阻礙了它的應用。
  2. 2.序列後的碼流太大。 java序列化的大小是二進制編碼的5倍多!
  3. 3.序列化性能過低。 java序列化的性能只有二進制編碼的6 .17倍,可見 java序列化性能實在太差了。

總結 咱們判斷一個編碼框架的優劣主要從如下幾個方面:html

1.是否支持跨語言,支持語種是否豐富
2.編碼後的碼流
3.編解碼的性能
4.類庫是否小巧,API使用是否方便
5.使用者開發的工做量和難度。

幾個流行的編解碼框架

1.google的Protobuf

Protobuf是google開源的項目,全稱 Google Protocol Buffers.特色:java

1.結構化數據存儲格式(xml,json等)
2.高性能編解碼技術
3.語言和平臺無關,擴展性好
4.支持java,C++,Python三種語言。

2.faceBook的Thrift

Thrift源於faceBook,2007年facebook將Thrift作爲一個開源項目交給了apache基金會。特色:算法

  
  
  
  
  1. 1 .Thrift支持多種語言( C++, C#, Cocoa, Erlag, Haskell, java, Ocami, Perl, PHP, Python, Ruby,和 SmallTalk
  2. 2 .Thrift適用了組建大型數據交換及存儲工具,對於大型系統中的內部數據傳輸,相對於 Jsonxml在性能上和傳輸大小上都有明顯的優點。
  3. 3 .Thrift支持三種比較典型的編碼方式。(通用二進制編碼,壓縮二進制編碼,優化的可選字段壓縮編解碼)

3.kryosql

官方文檔中文翻譯:http://blog.csdn.net/fanjunjaden/article/details/72823866
apache

1.速度快,序列化後體積小
2.跨語言支持較複雜

4.hessianjson

1.默認支持跨語言
2.較慢

5.fst網絡

高性能序列化框架FST:http://liuyieyer.iteye.com/blog/2136240
框架

  
  
  
  
1.fst是徹底兼容JDK序列化協議的系列化框架,序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右。

6.序列化成json

各個JSON技術的比較詳解:http://developer.51cto.com/art/201506/480273.htm

6.一、開源的Jackson

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

6.二、Google的Gson

  
  
  
  
  1. Gson是目前功能最全的Json解析神器,Gson當初是爲因應Google公司內部需求而由Google自行研發而來,
  2. 但自從在2008年五月公開發布初版後已被許多公司或用戶應用。
  3. Gson的應用主要爲toJson與fromJson兩個轉換函數,無依賴,不須要例外額外的jar,可以直接跑在JDK上。
  4. 而在使用這種對象轉換以前需先建立好對象的類型以及其成員才能成功的將JSON字符串成功轉換成相對應的對象。
  5. 類裏面只要有get和 set方法,Gson徹底能夠將複雜類型的 json到bean或bean到 json的轉換,是 JSON解析的神器。
  6. Gson在功能上面無可挑剔,可是性能上面比FastJson有所差距。

6.三、阿里巴巴的FastJson

  
  
  
  
  1. Fastjson是一個Java語言編寫的高性能的JSON處理器,由阿里巴巴公司開發。
  2. 無依賴,不須要例外額外的jar,可以直接跑在JDK上。
  3. FastJson在複雜類型的Bean轉換Json上會出現一些問題,可能會出現引用的類型,致使Json轉換出錯,須要制定引用。
  4. FastJson採用首創的算法,將parse的速度提高到極致,超過全部json庫。

綜上4種Json技術的比較,在項目選型的時候可使用Google的Gson和阿里巴巴的FastJson兩種並行使用,
若是隻是功能要求,沒有性能要求,可使用google的Gson,
若是有性能上面的要求可使用Gson將bean轉換json確保數據的正確,使用FastJson將Json轉換Bean

以上全部框架性能測試數據結果:http://developer.51cto.com/art/201506/480273.htm

相關文章
相關標籤/搜索