msgpack使用
来源:互联网 发布:淘宝店铺怎么制作头像 编辑:程序博客网 时间:2024/06/05 11:45
http://msgpack.org/
msgpack介绍
msgpack是一个串行化的第三方库,支持多种语言绑定,同类的软件还有boost的Serialization, google的protobuf等。据说msgpack比protobuf快四倍,而Serialization没有比较过。
msgpack使用
类介绍
缓冲区 sbuffer, vrefbuffer, zbuffer。第一个类sbuffer比较常用,即simple buffer,第三个是自动压缩数据的,需要安装zlib库,在这里不做详细介绍,第二个vrefbuffer,即vector reference buffer,没发现有多大意义,故不解释。
*打包类 packer, 打包一组数据时用,若只打包一个数据只需用pack方法即可。
- 解包相关类(unpacker, unpacked), unpacked是存放解包结果的类,而unpacker类内部维护着一个缓冲区存放待解包的数据。 unpack_return类,执行unpack操作的结果
- 实例
//打包一组数据void test1(){ using namespace msgpack; sbuffer buff1; packer<sbuffer> pk(&buff1); pk.pack(1); pk.pack(2); pk.pack(3); // save packed data to file ofstream of("1.txt"); of << buff1.size() << buff1.data(); of.close(); //------------------------------- ifstream is("1.txt"); int n; is >> n; unpacker upk; upk.reserve_buffer(n); //set buffer size is.read(upk.buffer(), n); // read data size upk.buffer_consumed(n); // set buffer data real size unpacked result; while(upk.next(&result)) { object obj = result.get(); cout << obj.as<int>() << endl; } is.close();}
class myclass{public: myclass() : num(0), str("default"){} myclass(int n, const string &s) : num(n), str(s){} int num; string str; MSGPACK_DEFINE(num, str);};//打包一个数据void test2(){ using namespace msgpack; sbuffer sbuf; myclass m(1,"hello"); pack(sbuf, m); unpacked result; unpack(&result, sbuf.data(), sbuf.size()); object obj = result.get(); myclass m2 = obj.as<myclass>(); cout << m2.num << " " << m2.str << endl;}
封装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
template
<
class
T>
void
pack(T &t, string &str)
{
using
namespace
msgpack;
sbuffer buff;
pack(buff, t);
ostringstream is;
is << buff.size() << buff.data();
str = string(is.str());
}
template
<
class
T>
T unpack(string &str)
{
if
(str.size() == 0)
return
NULL;
using
namespace
msgpack;
unpacked result;
istringstream ss(str);
int
len;
string buff;
ss >> len >> buff;
// it's possible exception
unpack(&result, buff.c_str(), len);
object obj = result.get();
return
obj.as<T>();
}
小结
msgpack支持多种语言绑定,非常强大,而且速度也很快。msgpack还有许多其它类没有使用,如pool, zone等,我认为在c++里用处不大,用c可能很有用,我没有仔细考证,只是通过下面的声明得出结论。
static void unpack(unpacked* result, const char* data, size_t len, size_t* offset = NULL);// obsoleteinline unpack_return unpack(const char* data, size_t len, size_t* off, zone* z, object* result)
0 0
- msgpack使用
- msgpack的使用
- msgpack
- linux使用msgpack及测试
- msgpack[C++]使用笔记 和 msgpack/cPickle性能对比
- msgpack[C++]使用笔记 和 msgpack/cPickle性能对比
- msgpack[C++]使用笔记 和 msgpack/cPickle性能对比
- 通信中使用的数据格式(xml,json,pb.msgpack)
- 使用jmeter 封装MSGPACK协议做压力测试
- 通信中使用的数据格式(xml,json,pb.msgpack)
- msgpack 原理
- msgpack用法
- 安装msgpack
- 使用MsgPack配合Qt应用程序和node.js应用程序的数据传输
- jsonsmart,msgpack,protocalbuffer谁更强?
- massage pack msgpack
- msgpack---序列化
- 串行化 msgpack etc.
- 【ZSTU4210 2015年12月浙理工校赛 A】【DFS爆搜】孙壕请一盘青岛大虾呗 n个消费点m个购物点最后一位置恰好消费完
- 【ZSTU4211 2015年12月浙理工校赛 B】【水题】七龙珠 排序判相同
- 对MAC自带的SVN进行升级
- iOS 保持界面流畅的技巧(最全最详尽的了)
- 【ZSTU4212 2015年12月浙理工校赛 C】【博弈 KMP or strncmp】String Game 字符串前后取数两人轮流 看最后剩下的是否可能为模板串
- msgpack使用
- Fresco
- UITextField键盘类型
- nginx 监控ngtop
- Spring中@Autowired注解和@Resource注解的区别
- 仿支付宝密码输入界面+随机键盘
- 【ZSTU4213 2015年12月浙理工校赛 D】【双连通分量tarjan算法】One-Way Roads 无向连通图确定边的方向使得全图任意两点间可达
- android SDK开发 -- TitleBar封装(一)
- 机器学习--支持向量机