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,958评论 19 139
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,289评论 0 16
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,142评论 0 62
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,518评论 0 3
  • 每天进步一点点,坚持带来大改变……坚持听剽悍晨读有一段时间了,非常喜欢语音阅读的方式,能让听者的注意力更为...
    活力初霞阅读 261评论 0 0