Как я могу распаковать gzip поток с zlib?

Реальное крушение Одиночных элементов состоит в том, что они повреждают наследование. Вы не можете получить новый класс, чтобы дать Вам расширенную функциональность, если у Вас нет доступа к коду, где на Singleton ссылаются. Так, вне факта Singleton сделает Ваш код сильно связанным (закрепляемый Стратегической моделью... иначе Внедрение зависимости), это будет также препятствовать тому, чтобы Вы закрыли разделы кода от пересмотра (совместно использованные библиотеки).

поэтому даже примеры регистраторов или пулов потоков недопустимы и должны быть заменены Стратегиями.

103
задан Greg Hewgill 3 December 2009 в 09:19
поделиться

1 ответ

Чтобы распаковать файл формата gzip с помощью zlib, вызовите inflateInit2 с параметром windowBits как 16 + MAX_WBITS , как это :

inflateInit2(&stream, 16+MAX_WBITS);

Если вы этого не сделаете, zlib пожалуется на неправильный формат потока. По умолчанию zlib создает потоки с заголовком zlib, а при inflate не распознает другой заголовок gzip, если вы этого не укажете. Хотя это задокументировано, начиная с версии 1.2.1 заголовочного файла zlib.h , в руководстве zlib ) этого нет. Из файла заголовка:

windowBits также может быть больше 15 для необязательного декодирования gzip. добавлять От 32 до windowBits для включения декодирования zlib и gzip с автоматическим заголовком обнаружения или добавьте 16, чтобы декодировать только формат gzip (формат zlib будет вернуть Z_DATA_ERROR ). Если декодируется поток gzip, используется strm-> adler crc32 вместо adler32.

111
ответ дан 24 November 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: