解凍せずにgzipファイルの圧縮されていないサイズを取得する方法や、少なくとも全体を解読する方法はありません。 3つの理由があります。
最初に、圧縮されていない長さに関する情報は、gzipファイルの最後(リトルエンディアンの順番で格納されています)の4バイトです。必然的に、それはモジュロ2の長さである。。圧縮されていない長さが4 GB以上であれば、その長さは分かりません。圧縮された長さが2 /1032 + 18、または約4 MB未満の場合は、圧縮されていない長さが4 GB未満であることが分かります。 (1032はデフレートの最大圧縮係数です)
第2に、これは悪いことですが、gzipファイルは実際には複数のgzipストリームを連結したものです。デコード以外にも、4バイトの圧縮されていない長さを見るために各gzipストリームの終わりを見つける方法はありません。 (とにかく最初の理由で間違っているかもしれません)
第3に、gzipファイルはgzipストリームの終わり(通常はゼロ)の後で迷惑をかけることがあります。最後の4バイトは長さではありません。
したがってgzip -l
は実際には機能しません。その結果、zlibにその機能を提供することに意味はありません。
pigzには、実際の圧縮されていない長さを得るために入力全体を実際にデコードするオプションがあります。正しい答えが保証されます。pigz -lt
pigz -l
は何を行うのですか?gzip -l
は間違っている可能性があります。
注:私は似たような質問があることを知っていますが、実際にはそのためのzlib関数があれば答えはありません。 –