【发布时间】:2012-03-25 22:36:31
【问题描述】:
我需要在 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 中),然后将这些字节传递给另一个方法并从这些字节重新构造对象.
如果你能给我一个提示,我将不胜感激。
【问题讨论】:
-
“字节流”是什么意思?你打算用它做什么?
-
查看一些序列化框架,如 msgPack 或 Thrift。您在此处描述的方法不适用于字符串或复杂的数据结构。
-
@OliCharlesworth:我需要字节流来做一些计算(对于拉宾算法)。
-
@DvirVolk:但上面的代码适用于对象 one。据我所知,C++ 中的序列化不适用于向量或列表。
-
您的代码可能意外运行,因为您在同一个进程空间中对其进行了反序列化,因此所有指针都保留在原位。但您将永远无法跨进程对其进行序列化。
标签: c++ serialization