2016-08-30 2 views
0

zlib gzopen()は圧縮ファイルストリームを返します。zlib gzopen()は、圧縮ファイルストリームを返します。ファイルを解凍しますか?

gzFile data_file; 
data_file = gzopen(filename.c_str(), "r"); 

ここで、data_fileは圧縮ファイルストリームです。 私はzlib docsからこれを見逃しているかもしれません。しかし、これは開かれたファイルを解凍しますか? gzopen()は、gzippedファイルを直接解析することはできません。 これを解凍する必要はありませんか?

ありがとうございます!

+0

開かれたファイルを 'gz'関数で読み込むと解凍が行われます。 'gz'ファンクションファミリーの全ポイントは、圧縮されていないかのようにCスタイルのインターフェースで圧縮されたファイルで作業できるようにすることです。 – HolyBlackCat

答えて

5

gzopenデータを解凍しません。gzreadは、解凍すると解凍します。

zlibドキュメントでは、この事実の簡単な説明は見つかりませんでしたが、自分で大きな(数GBの)圧縮ファイルを作成してから、どれくらいの速さで測定するかを証明したい場合はgzopenが返されます。 「明らかに」、ファイル全体を解凍するのに必要な時間はかかりません。 gzip圧縮がどのように定義されているかを調べると、ストリームとして書き込まれ、読み込まれるように設計されていることがわかります。つまり、一度にファイル全体を解凍する必要はありません。

+0

あなたは実際にデータを格納していないと仮定し、 'gzread'が圧縮ファイルを標準出力に(非圧縮テキストとして)印刷するために使われたとします。このようなプログラムのピーク時のメモリ使用量は、ファイルを完全に解凍し、バッファに格納し、解凍したデータを出力するプログラムのメモリ使用量に決して達しませんか? –

+0

これは正しいです。 –

+0

乾杯、ブラザーベア!!! –

関連する問題