2016-08-24 11 views
0

Я использую следующий код, чтобы попытаться сериализации/десериализации объекта как двоичные данные:Cereal Binary Архив сериализации/десериализации

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, используя выходной архив и использовать тот же 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

Вы по-прежнему не отличаетесь от того, что я показал ИМО. Вы видите какие-либо проблемы с моим решением? – Arunmu

+0

Ну, вопрос обновлен, но сейчас нет сомнений :) – Arunmu

 Смежные вопросы

  • Нет связанных вопросов^_^