【随笔】msgpack-java 理解

msgpack-java 经历了两个大的版本,一个是0.6.* 一个是 [0.7.,0.8.]。0.7.* 基本把0.6版本重构了一遍。具体的差异点如下:

  1. MesspagePack type system 到 formats 层 ,0.6.版本与[0.7.,0.8.*]版本序列化和反序列化不兼容

    0.6版本formats规则和0.7的版本formats规则不一样。意味着发送端和接收端的版本不能一个是0.6* 一个是[0.7.,0.8.]。比如:https://github.com/msgpack/msgpack-java/issues/252

    但是这个问题好解决,因为 0.7以上版本的artifactId由「msgpack」改为了 「msgpack-core」。所以端到端的依赖的artifactId是一样的就行。

  2. java object properties 到 MessagePack type system 串,由 Array 表达改为 Map 表达

    0.6版本对对象的自动序列化实现方案,是将类成员编码为。而0.7版本通过实现jackson,从而可以将对象自动序列化为map,而map的key名是通过jackson注解来指定。

    我认为这个改变主要是因为用array 来表达 properties,是顺序敏感的,比如两个连续的 int 类型 propertie ,先后顺序规则无法通过字串传输,容易由于object 更改导致的端到端协议不一致问题。
    而0.7.*改为用 map 表达 properties 以后规避了这个问题,因为map的二进制串是顺序不敏感的。相当于0.7版本,通过损失空间、效率,增加object数据协议的一致性。

另外我看了一下 MessagePack 的java实现和 JS 实现是两个人写的,很有可能JS Object 层到 MessagePack type system 和 java object 层到 Messagepack type system 的实现方式不一样(比如一个是array表达properties 一个是map)。所以可能JS和JAVA间用Messagepack 还不会像JSON这么简单。这个有待考究,感兴趣的人可以看看然后分享一下。

/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/object.hpp:664:34: error: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct msgpack::v2::object’ from an array of ‘const msgpack_object’ {aka ‘const struct msgpack_object’} [-Werror=class-memaccess] std::memcpy(&o, &v, sizeof(v)); ^ In file included from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object_fwd.hpp:17, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/adaptor/adaptor_base_decl.hpp:14, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/adaptor/adaptor_base_decl.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/adaptor/adaptor_base.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/object_decl.hpp:16, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object_decl.hpp:14, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack.hpp:10, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/example/cpp03/stream.cpp:10: /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v2/object_fwd.hpp:23:8: note: ‘struct msgpack::v2::object’ declared here struct object : v1::object { ^~~~~~ cc1plus: all warnings being treated as errors make[2]: *** [example/cpp03/CMakeFiles/stream.dir/build.make:63:example/cpp03/CMakeFiles/stream.dir/stream.cpp.o] 错误 1 make[2]: 离开目录“/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master” make[1]: *** [CMakeFiles/Makefile2:415:example/cpp03/CMakeFiles/stream.dir/all] 错误 2 make[1]: 离开目录“/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master”
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值