我需要在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中),然后将这些字节传递给另一个方法并从这些字节重新构造对象
如果你给我一个暗示,我将不胜感激。
答案 0 :(得分:2)
您确实意识到您正在编写one
的地址,对吗?基本上你所写的相当于:
NodeEntry** doublePtr = &one;
oner = *doublePtr;
如果你想写对象的内容,你可以将one
传递给write
和sizeof(NodeEntry)
,但正如Dvir Volk所提到的,这不会正常工作(或至少可能不是你想要的方式)包含指针的任何东西。
无论如何,我喜欢Google's Protocol Buffers来序列化对象。它是解决您问题的更强大的解决方案。
另外,“字节流”毫无意义......你的意思是对象的原始内存是以字节为单位吗?