0
私はfiltered_streamsを使用して、array_sink
などのデバイスへのシリアル化を圧縮しようとしています。そこで、圧縮された出力の長さを決定し、別のストリーム、たとえばファイルにコピーできます。ただし、filtering_ostream
にostream::tellp
を使用すると、ブーストによってランタイム例外がスローされます。私が間違っていることを本当に理解することはできません。Boost filtering_streamとtellp
using namespace boost::iostreams;
char *buffer = new char[4096*255];
array_sink zipStream(buffer, 4096*255);
filtering_ostream tempOut;
tempOut.push(zlib_compressor());
tempOut.push(zipStream);
column->Serialize(tempOut); // Object::Serialize(ostream&)
tempOut.flush(); // ?
int zipSize = tempOut.tellp();
// Do stuff with zipStream...
ありがとうございます!私はこの考え方に沿って作業していましたが、シークできないとtellpを防ぐことはできませんでしたが、スタックを実行すると、実際にそれを探していて、例外がスローされていました。ストリームに 'counter'フィルタを置いて、私が望むことを達成しました。 – MischaNix