Msgpack有没有兴趣了解一下?

简介: Msgpack有没有兴趣了解一下?

在我们做开发的时候经常会考虑到客户端服务器通信到问题,简单的来说就是客户端首发数据的问题。


那么,对于收发的数据这个内容,其实大有讲究,关于收发数据,我们通常情况下都会毫不犹豫的会说json数据,xml数据,基本上就这么多了,现在基本上都是json数据为主了,那我们今天来介绍的是比json还好用的数据结构------msgpack。


比json好用的数据其实有很多,例如上次我们提到过的protobuf,这是google提供的一个数据结构,能改很大程度上改善传送数据的大小和结构,默认读取的数据都会解析成字符串。那我们为什么会选则使用msgpack呢?


首先引用msgpack官网用一句话总结:

640.png


msgpack会将数据打包成二进制的数据,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加,所以在很大程度上减少来传输数据的大小。如果说把json数据的大小比作西瓜大小,那么protobuf就是苹果大小,msgpack呢,则是红豆大小,所以msgpack使用优势还是很明显的!


下面我们来看看来自msgpack官网的第二张图:


640.png

一组json数据长度是是27个bytes,因为使用json这样的数据格式,在这个格式上就会消耗9个字节(分号,大括号之类的,这些数据其实),然后在数据的表示上也会有优化

,例如,关于数据Ture,在msgpack里面直接给一个字节就可以表示true(0xc3),关于结构化数据,例如字符串,数组等,类型后面加 1~4个字节,用来存字符串的长度,如果是字符串长度是256以内的,只需要1个字节,MsgPack能存的最长的字符串,是(2^32 -1 ) 最长的4G的字符串大小。如果是字典的类型的数据的话,需要加1~4个字节表示后面有多少个项。



关于如何使用Msgpack?


msgpack这么好用,我们应该如何使用它呢?

这和json用起来是一样的,无非就是打包和解包。这里我们采用python来演示一下。

想在python中使用msgpack,就需要安装msgpack模块,我们还是老样子,使用pip进行安装:

pip install msgpack

安装完之后导入这个模块,就可以使用了。

import msgpack
msgpack.packb([1, 2, 3], use_bin_type=True)
'\x93\x01\x02\x03'
msgpack.unpackb(_, raw=False)
[1, 2, 3]


如代码所示,我们采用packb对数据进行打包,使用unpackd进行解包。


我们还可以借助于bytesIO打包数据:

import msgpack
from io import BytesIO
buf = BytesIO()
for i in range(100):
   buf.write(msgpack.packb(i, use_bin_type=True))
buf.seek(0)
unpacker = msgpack.Unpacker(buf, raw=False)
for unpacked in unpacker:
    print(unpacked)


在使用packb和unpackb方法时可以默认只传一个参数,也就是要打包/解包的数据,其他都可以默认不传。


除了使用packed方法,msgpack很人性化的提供了另一种打包和解包的方法,这个方法和json打包/解包的方法一样,那就是dumps和loads方法了:

import msgpack
a = msgpack.dumps([1, 2, 3], use_bin_type=True)
msgpack.loads(a, raw=False)


以上就是小编这次给大家带来的msgpack的介绍了。

相关文章
|
3月前
webpack——You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
webpack——You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
390 0
|
11月前
【Webpack】TypeError: Cannot read property ‘tap‘ of undefined at HtmlWebpackPlugin.
【Webpack】TypeError: Cannot read property ‘tap‘ of undefined at HtmlWebpackPlugin.
|
存储 JSON 缓存
MessagePack - 简介及使用
MessagePack - 简介及使用
896 1
MessagePack - 简介及使用
|
存储 JSON 安全
msgpack,fmtlib和RPClib库的介绍及使用
msgpack,fmtlib和RPClib库的介绍及使用
|
数据采集 JavaScript 中间件
Node.js的nrm报错:internal/validators.js:125 throw new ERR_INVALID_ARG_TYPE
Node.js的nrm报错:internal/validators.js:125 throw new ERR_INVALID_ARG_TYPE
315 0
|
存储 前端开发 JavaScript
webpack中output中path和publicPath区别详解
webpack中output中path和publicPath区别详解
254 0
webpack中module package bundle chunk详细讲解
webpack中module package bundle chunk详细讲解
105 0
|
JavaScript 前端开发
Parsing error: x-invalid-end-tag vue/no-parsing-error的问题解决方法
这个问题一般出现在前端项目中,是一个常见的问题
1341 0
Parsing error: x-invalid-end-tag vue/no-parsing-error的问题解决方法
MessagePack Jackson 数据大小
我们在使用 MessagePack 对 List 对象数据进行序列化的时候,发现序列化以后的二进制数组数据偏大的情况。 请注意,不是所有的 List 对象都会出现这种情况,这个根据你 List 对象中存储的内容有关。
1024 0
|
开发工具 git