0

私は、ディスクで問題が発生した場合に、ZLIB を使用して圧縮した後、メモリのチャンクを別のディスクに送信するプロジェクトに取り組んでいます。このダンプをダウンロードして、さらにデバッグするために使用する予定です。この圧縮とアップロードは、一度に 1 つのチャンク (1024 K など) で行われます。

問題は、他のディスクにアップロードする前に、正確に 1024K の出力チャンクが必要なことです (これに加えて、ヘッダーとトレーラーも存在するため、このチャンク サイズは圧縮データのサイズです)。簡単に解凍できます。そしてそれを使用してください。出力バッファが 1024K になったら他のディスクに送信できるように put_byte 関数を変更しようとしましたが、これは機能していないようです。

Z_BUF_ERROR をチェックし、それを送信して圧縮手順全体を再起動することを考えましたが、保留中のすべての入力/出力がフラッシュされたかどうかはわかりません。

これを実行できる他の方法はありますか?つまり、出力バッファー (圧縮されたデータ サイズ) が正確に 1024K バイトのときにパケットが送信されるようにします。

4

1 に答える 1

0

おそらく、C++ http://github.com/rudi-cilibrasi/zlibcomplete ZLibComplete ライブラリのような高レベルのファサード ライブラリを使用すると、運が良くなるでしょう。std::string を使用し、動的割り当てを必要としないため、自分でバッファーを管理する必要はありません。単純に std::string に入れて、返された std::string を書き出すだけです。また、戻り値をチェックする必要も、条件付きでループする必要がありますか。これは単純に文字列に関して機能します。文字列を入れて、圧縮または解凍のために好きなだけ文字列を取り出します。一般的な圧縮形式である GZip と ZLib の両方で開始できる短い実用的なサンプル プログラムがあります。

于 2015-08-14T06:05:51.137 に答える