2016-08-24 1 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に同じにstringstreamを使用する必要があります。

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