Определяемый пользователем Сериализация Класса, C ++ и msgpack - PullRequest
5 голосов
/ 01 июня 2011


Я совершенно новый, пытающийся msgpack. Мне нужно сериализовать объект (экземпляр пользовательского класса), который содержит указатели (внутреннее дерево, хэши и т. Д.) И некоторые атрибуты базовых типов.

До сих пор я мог делать то, что делается в кратком примере вики msgpack.org, просто сериализовать класс в 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);

спасибо всем!
Bests
Luchux.

1 Ответ

3 голосов
/ 01 июня 2011

Из приведенного здесь примера:

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

похоже, что sbuf.data () возвращает адрес, а sbuf.size () возвращает размер данныхкоторый вы бы записали в двоичный файл.

Если вы хотите загрузить данные из двоичного файла, прочитайте их в выделенный вами буфер, а затем передайте адрес и размер в вызов msgpack :: unpack.

...