我正在使用以下代码尝试将对象序列化/反序列化为二进制数据:
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 :(得分: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();
}
}