C ++ объектная сериализация - PullRequest
0 голосов
/ 26 марта 2012

Мне нужно получить поток байтов объекта в C ++. Я не мог найти способ сделать это без использования сериализации.

NodeEntry *one = new NodeEntry("mani", 34, 56.3);

ofstream rofs("result.ros", ios::binary);
rofs.write((char *)&one, sizeof(one));
rofs.close();

// now we read the file into object!!    
ifstream ifsr("result.ros", ios::binary);
NodeEntry *oner;
ifsr.read((char *)&oner, sizeof(oner));

Есть ли другой обходной путь? Я не хочу отправлять этот объект по сети или хранить его на жестком диске. Я просто хочу получить поток байтов объекта one без фактического создания файла.

Другими словами, мне нужно создать поток байтов объекта one и сохранить его где-нибудь (как в ostream), а затем передать эти байты другому методу и восстановить объект из этих байтов.

Буду признателен, если вы дадите мне подсказку об этом.

1 Ответ

2 голосов
/ 26 марта 2012

Вы понимаете, что пишете адрес из one, верно?В основном то, что вы написали, эквивалентно:

NodeEntry** doublePtr = &one;
oner = *doublePtr;

Если вы хотите записать содержимое объекта, вы передадите one в write и sizeof(NodeEntry), но как DvirВолк упоминает, что это не будет работать правильно (или, по крайней мере, вероятно, не так, как вы этого хотите) с чем-либо, содержащим указатель.

В любом случае, мне нравится Протоколные буферы Google для сериализации объектов,Это гораздо более надежное решение вашей проблемы.

Кроме того, «поток байтов» не имеет смысла ... Вы имеете в виду необработанную память объекта в байтах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...