首先,关于MessagePack协议,访问http://msgpack.org可以了解详细的格式约定及各种语言的实现。
其次,MessagePack协议号称比JSON快,但速度的快慢这个东西受各个实现的限制,有的实现的Json比MessagePack的实现要更快一些,所以不要盲目的就随便拿一个MessagePack实现就认为比JSON快。
末了,本人认为MessagePack协议最主要的优势是在体积,而不是在于速度。由于其类型明确,不需要类型推断,开发的难度相对还是比较低的。
现在进入正题:
QMsgPack是QDAC项目实现的MessagePack协议,支持MessagePack官方规格表(链接)的所有数据类型,包括扩展类型。由于Delphi下MessagePack协议的实现较少,所以没有什么啥速度比较,要测试其性能,可以进入Demos\Delphi\VCL\QMsgPack目录下,编译Demo,在我的计算机上,加载一个30多M的文件,用时不到1秒,参考下图:
QMsgPack单元使用需要以下文件支持:qdac.inc、qstring.pas、qrbtree.pas、qmsgpack.pas,它包括两个类:TQMsgPack和TQHashedMsgPack,两者的区别在于前者没有使用哈希针对查询进行全面优化,理论上查询性能要弱于后者,但相应的其它方面的开销也要小于后者。
QMsgPack的接口和QJSON保持了良好的一致性,熟悉一个,另一个会很快熟悉掌握。