2012-03-25 97 views
0

我需要在C++中获取对象的字节流。 我找不到使用序列化的方法。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)); 

是否有其他解决方法?我不想通过网络发送这个对象或将它存储在硬盘上。我只想获得对象一个的字节流,而不实际创建文件。

换句话说,我需要创建一个对象的字节流一个并将其存储在某处(如在一个ostream中),然后将这些字节传递给另一个方法并从这些字节重新构造对象。

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

+0

你是什么意思的“字节流”?你打算如何处理它? – 2012-03-25 22:38:56

+1

查看一些序列化框架,如msgPack或Thrift。这里描述的方法不适用于字符串或复杂的数据结构。 – 2012-03-25 22:41:27

+0

@OliCharlesworth:我需要字节流来做一些计算(对于Rabin算法)。 – ManiAm 2012-03-25 22:46:01

回答

2

你意识到你正在编写地址one,对吧?基本上,你写的是等价的:

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

如果你想写对象的内容,你会传递到onewritesizeof(NodeEntry),但DVIR沃尔克提到,这是不行的对任何包含指针的对象(或者至少可能不是你想要的对象)。

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

此外,“字节流”没有意义......你的意思是以字节为单位的对象的原始记忆?