Почему я не могу использовать zlib для распаковки строки, как в стиле gzip - PullRequest
2 голосов
/ 04 мая 2011

Я знаю, что здесь есть много вопросов и ответов о распаковке данных с помощью модуля zlib или gzip в python. Но мне любопытно, как gzip реализует это, так как gzip основан на zlib.
Я прочитал исходный код gzip и обнаружил, что он использует zlib для распаковки порций данных на порции с wbits, установленными в -15.
Однако, когда я непосредственно использую zlib с wbits -15 для распаковки, он говорит мне «недопустимый тип блока», только с wbits 15 + 16 это может работать.

Я знаю, почему я должен использовать 15 + 16, однако я не знаю, почему gzip может использовать -15, но я не могу. Кто знает различия реализаций между моими и gzip модулями?

1 Ответ

2 голосов
/ 13 сентября 2013

Модуль zlib передает параметр wbits непосредственно фактической библиотеке zlib.Там он называется windowBits и описан в руководстве zlib .Позвольте мне процитировать соответствующий раздел:

windowBits также может быть –8 ..– 15 для необработанного дефлата.В этом случае -windowBits определяет размер окна.Затем deflate () сгенерирует необработанные данные deflate без заголовка или трейлера zlib и не будет вычислять значение проверки adler32.

Поскольку модуль gzip сам выполняет синтаксический анализ и генерацию заголовка, он должен указатьЗлеб, чтобы избежать этого.В противном случае было бы два заголовка zlib и сломанный сжатый файл.

...