用户定义的类序列化、C++和msgpack

User defined Class Serialization, C++ and msgpack

本文关键字:C++ msgpack 序列化 定义 用户      更新时间:2023-10-16


我是一个尝试msgpack的新手。我需要序列化一个对象(用户定义类的实例),它包含指针(内部树、散列等)和一些基本类型属性。

到目前为止,我可以执行msgpack.org wiki的快速示例中所做的操作,只需将类序列化为msgpack::sbuffer,然后读取缓冲区以取消序列化。

但是现在,我想将缓冲区发送到文件,或者将序列化结果发送到文件然后取消序列化。
有人能给我一些怎么做的建议吗?我浏览和阅读了足够多的内容,已经厌倦了:)

我的代码如下:

msgpack::sbuffer sbuf;
msgpack::pack(sbuf, cluster); //cluster is the instance of my class clustering
//HERE I SHOULD SEND THE BUFFER TO A STREAM FILE, AND THEN LOAD IT IN THE UNPACK;
msgpack::unpacked msg;
msgpack::unpack(&msg, sbuf.data(), sbuf.size()); 
msgpack::object obj = msg.get();
clustering clustUnser
obj.convert(&clustUnser);

谢谢大家
最佳,
勒克斯。

从这里的例子来看:

http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387

看起来sbuf.data()会返回要写入二进制文件的数据的地址,sbuf.size()则会返回数据的大小。

当您想从二进制文件加载数据时,将其读取到您分配的缓冲区中,然后将地址和大小传递给msgpack::unpack调用。