最近在做一个ANDROID的应用,和服务器进行交互的时候就考虑到了对象序列化的问题。
翻遍网络,最后选出三个种子选手:
jsonsmart json格式中的绝对王者 速度快,信息少
msgpack 二进制序列化的怪杰,号称比protocal buffer快四倍,比json快10倍
protocal buffer GOOGLE出品,号称比XML快百倍
对着三个东西同样条件下测试了一下,主要是测试谁的包最小,因为和处理速度相比,网络传输更加敏感。
结论:
如果你的数据包以二进制数据为主,那么王者是msgpack.
如果你的数据包以字符串为主,那么王者是jsonsmart!!!!
msgpack和protocal buffer在以字符串为主的数据包中,表现完全相同。
具体的说,JSONsmart的数据只相当于其他两个的68.5%。也就是说领先32%。
我想这个结果可能和很多人想的不太一样,大家可以自己去测试吧。
也不难看出我的倾向是选择JSONsmart 了,因为我们的的数据还是主要是以字符串为主的。我想绝大部分的ANDROID应用系统都应该是以字符串为主的。
不过呢,要说编程最简单,还是msgpack 了。解析对象化 jsonsmart做的很差!这点让人郁闷,怎么就不能十全十美呢!不过2.0貌似有改善。
编程最麻烦是 protocal buffer!我对GOOGLE的程序设计水平一直不太欣赏。这次又给我了一点加强。
因此 mspack和protocal buffer 水准比较接近。但是二进制数据的综合性能还是 msgpack胜出。
从部署的角度说,
jsonsmart 1.1只需要50K。
protobuffer2.5需要529K
msgpack 0.6.7需要923K(只是用序列化功能,不用RPC,如果要用RPC,还要加上90K),其实 msgpack 本身只需要272K,但是它依赖的javassist.jar需要689K!!!!
从这个角度说msgpack是最失败的了。有几个愿意为了是用你的序列化功能就让ANDROID程序增加923K的???
JSONsmart再一次成为王者。
她的缺陷:1.反序列化对象化作的不好 2.数据包是字符
要克服第一点,可以考虑采用jsonsmart 2.0,要解决第二个问题,可以自己写一个简单的加解密程序。
如果这样,ANDORID方案就再也没有比jsonsmart 更好的方案了!
因此我最后选择了jsonsmart 方案,事实证明,效果完美。