2016-04-12 5 views
0

zlibはデータをバッファリングして圧縮するのを待っていますか? Z_STREAMの変数の1つ、または他の場所でこれを表示できますか?deflate(またはあなたのZ_STREAM)にデータがバッファされているかどうかを知る方法はありますか? zlib C++

基本的には、zストリームを強制的にフラッシュしたいが、ファイルの最後(常に更新されているファイル)にのみ読み込み、圧縮、読み込み、圧縮などを行う。z_finishをフラッシュするeofを実行し、次にトリックを行うべきである次の読み取りの前にresetdeflateを呼び出しますか?それは、バッファをフラッシュし、ストリームをリセットし、続行する必要がありますか?

答えて

1

いいえ、deflateには、圧縮されたデータを出力する前に、どれだけのデータが蓄積されたかを示す変数または関数がありません。回答できる質問は、deflatePending()であり、出力されたブロックの圧縮バイト数とビット数がまだユーザーの出力バッファに書き込まれていないことがわかります。

はい、デフレートストリームを終了するには、Z_FINISHを使用して、出力がなくなるまでdeflate()を呼び出します。それに続いてdeflateReset()を使用して構造を再利用して、新しいデフレートストリームを開始することができます。

これを頻繁に行うとします。ファイルに書き込まれたすべての行について、一般には1行はあまり圧縮できませんので、圧縮が難しいでしょう。あなたが探しているものは、gzlogのようなものです。これは、圧縮されたgzipファイルに行を追加し、適切な圧縮を提供しながら、それぞれの追加時に圧縮gzipストリームとしての正確さを維持します。

関連する問題