2016-08-24 78 views
0

我用下面的代码试图序列/反序列化对象的二进制数据:谷物二进制归档序列化/反序列化

MyDTO dto1;  
std::ostringstream os(std::stringstream::binary); 
{ 
    cereal::BinaryOutputArchive oarchive(os); // Create an output archive 
    oarchive(dto1); 
} 

MyDTO dto2; 

std::istringstream is(os.str(), std::stringstream::binary); 
{ 
    cereal::BinaryInputArchive iarchive(is); // Create an input archive 
    try { 
     iarchive(dto2); 
    } 
    catch (std::runtime_error e) { 
     e.what(); 
    } 
} 

当代码运行时,一个异常被捕获与消息:

"Failed to read 8 bytes from input stream! Read 0"

任何人都可以帮助我了解发生了什么问题吗?

+0

您应该向我们展示输入文件 – Roberto

+0

没有输入文件,我正在读取和写入字符串。 –

+1

istringstream结构是固定的,现在似乎正常工作。 –

回答

1

您的输入档案iarchive有没有数据可读,因为is是空的。你应该使用输出存档先写入stringstream,并使用相同字符串流为iarchive从阅读(我想这是你想要做什么)

你应该尝试像下面(我没有测试):

MyDTO dto1;  
std::stringstream os(std::stringstream::binary); 
{ 
    cereal::BinaryOutputArchive oarchive(os); // Create an output archive 
    oarchive(dto1); 
} 

MyDTO dto2; 

{ 
    cereal::BinaryInputArchive iarchive(os); // Create an output archive 
    try { 
     iarchive(dto2); 
    } 
    catch (std::runtime_error e) { 
     e.what(); 
    } 
} 
+0

在简化我的代码时,我忽略了将ostream读回istream的地方。问题已更新。 –

+0

你现在仍然与我所展示的IMO没有什么不同。你看到我的解决方案有任何问题吗? – Arunmu

+0

那么问题是更新,但现在没有问题:) – Arunmu

相关问题