【随笔】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这么简单。这个有待考究,感兴趣的人可以看看然后分享一下。

你可能感兴趣的:(java)