MsgPack和Hessian序列化的區別


兩者的區別:

  hessian序列化的時候,會寫入字段名稱,然后字段值,你可以想象為一個map。
  msgpack序列化的時候,不寫入字段名字,會按字段順序寫入值,你可以想象為一個數組。

從這就可以看出:

  hessian產生的數據包較大,msgpack產生的數據包較小。網絡傳輸數據更小。
  序列化中hessian的性能較差,(相當於每次map按名字取值)
  msgpack性能更佳,(相當於數組取值)
  壓測結果不同場景顯示提高10% - 30%。(從數組取值比map高效)
  hessian的擴展性更好,上下兼容時,可以隨意添加字段位置(相當於map可以隨便賦值)
  msgpack的性能更佳,上下兼容時,需要保證字段順序(包括枚舉順序)。 

其它一些差異:例如hessian對Map/List等集合支持就是全變成最普通的Hashmap或者ArrayList,一些指定的類型會丟失(例如LinkedHashMap-->HashMap),但是支持一些匿名的Map/List等集合類;
而msgpack會保留集合類的類型(例如LinkedHashMap),但是不支持一些匿名集合類(例如List.subList(),Map.keySet(),Collections.emptyList(),Guava的匿名集合類,數據庫查詢結果直接返回的list)

 

如果需要支持字段順序不一樣的情況下調用:請使用hessian序列化,但為了性能及跨語言兼容性,請在保證 客戶端與服務端的接口類文件保持一致的情況下使用msgpack序列化!!

 

不管選哪種序列化:

  接口類作為接口契約的重要組成部分,請盡量保證客戶端與服務端的接口類文件的完全一致性(請引用同樣的jar包!!)

  如果在bean中要增加新字段,請務必保證新字段加在字段序的最后!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM