C ++对象序列化

时间:2012-03-25 22:36:32

标签: c++ serialization

我需要在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 的字节流并将其存储在某处(如在ostream中),然后将这些字节传递给另一个方法并从这些字节重新构造对象

如果你给我一个暗示,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

您确实意识到您正在编写one地址,对吗?基本上你所写的相当于:

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

如果你想写对象的内容,你可以将one传递给writesizeof(NodeEntry),但正如Dvir Volk所提到的,这不会正常工作(或至少可能不是你想要的方式)包含指针的任何东西。

无论如何,我喜欢Google's Protocol Buffers来序列化对象。它是解决您问题的更强大的解决方案。

另外,“字节流”毫无意义......你的意思是对象的原始内存是以字节为单位吗?