hessian和msgpack區別?

對于序列化,有必要掌握它的原理,這樣在實際運用過程中,出現問題就能快速解決掉。

阿里的dubbo默認使用的就是hessian序列化,它的特性是:序列化的時候,會寫入字段名稱,然后字段值,你可以想象為一個map。

而京東jsf默認使用的是msgpack序列化,它的特性是:序列化的時候,不寫入字段名字,會按字段順序寫入值,你可以想象為一個數組。

從這里可以看出:msgpack序列化產生的數據包更小,網絡傳輸效率更搞。
壓測結果不同場景顯示提高10% - 30%。(從數組取值比map高效)

待測試內容:
其它一些差異:例如hessian對Map/List等集合支持就是全變成最普通的Hashmap或者ArrayList,一些指定的類型會丟失(例如LinkedHashMap-->HashMap),但是支持一些匿名的Map/List等集合類;
而msgpack會保留集合類的類型(例如LinkedHashMap),但是不支持一些匿名集合類(例如List.subList(),Map.keySet(),Collections.emptyList(),Guava的匿名集合類,數據庫查詢結果直接返回的list)
如果需要支持字段順序不一樣的情況下調用:請使用hessian序列化,但為了性能及跨語言兼容性,請在保證 客戶端與服務端的接口類文件保持一致的情況下使用msgpack序列化!!

特別注意:如果在bean中要增加新字段,請務必保證新字段加在字段序的最后!
案例:對象新增字段,放在中間位置,會導致序列化失敗!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 一、基本數據類型 注釋 單行注釋:// 區域注釋:/* */ 文檔注釋:/** */ 數值 對于byte類型而言...
    龍貓小爺閱讀 4,288評論 0 16
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,141評論 0 62
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,516評論 0 3
  • 每天進步一點點,堅持帶來大改變……堅持聽剽悍晨讀有一段時間了,非常喜歡語音閱讀的方式,能讓聽者的注意力更為...
    活力初霞閱讀 261評論 0 0