Конвертер GZIP в Deflate
Преобразование потока GZIP в чистый формат DEFLATE удаляет внешнюю оболочку файла и метаданные заголовка, оставляя только сжатые полезные данные для специализированных сетевых протоколов и низкоуровневых архивов.
Сравнение форматов и технические характеристики
| Характеристика | GZIP | DEFLATE |
|---|---|---|
| MIME-тип | application/ | application/ |
| Тип | контейнер потока DEFLATE | Сырой поток DEFLATE |
| Сжатие | DEFLATE (RFC 1951) | LZ77 + кодирование Хаффмана |
| Стандартная спецификация | IETF RFC 1952 | IETF RFC 1950 / RFC 1951 |
| Сигнатура файла (Magic Bytes) | 1F 8B (gzip ID1/ID2) | 78 01 / 78 9C / 78 DA (zlib header bytes) |
Обзор формата и областей применения
Преобразование потока GZIP в чистый DEFLATE часто происходит при веб-разработке, сетевом программировании и низкоуровневых рабочих процессах хранения данных. Разработчики часто имеют дело с GZIP при сохранении отдельных файлов на диск, так как этот формат включает полезные метаданные, такие как исходные имена файлов и временные метки изменения. Однако современные протоколы сжатия HTTP и конкретные двоичные форматы ожидают только сжатые полезные данные без каких-либо байтов-оболочек. Выполнение этого преобразования позволяет инженерам передавать стандартные сжатые данные напрямую в сетевые потоки или пользовательские парсеры. Например, создание пользовательского обработчика HTTP-ответов или работа с архивами ZIP часто требуют удаления заголовка GZIP и нижнего колонтитула CRC32 для выделения чистого вывода алгоритма. Удаление этих дополнительных данных контейнера снижает накладные расходы, когда каждый отдельный байт имеет значение в условиях ограниченной среды программирования.
Технические спецификации и разбор кодеков
Поток GZIP, определяемый MIME-типом application/gzip, использует структуру контейнера, заданную RFC 1952. Он начинается с двухбайтовой сигнатуры 0x1F, 0x8B, за которой следуют флаги сжатия, время изменения, идентификатор операционной системы и необязательное имя файла. Сжатые данные располагаются в середине файла, а в конце находятся четырехбайтовая контрольная сумма CRC32 и четырехбайтовый индикатор несжатого размера. В отличие от него, сырой DEFLATE представляет собой битовый поток RFC 1951 без фиксированной сигнатуры, обрамляющего заголовка или завершающей части. MIME-тип application/zlib обозначает оболочку zlib формата RFC 1950 вокруг DEFLATE, а не поток сырого DEFLATE. При преобразовании GZIP в сырой DEFLATE удаляются метаданные GZIP и контрольная сумма, а сжатые данные сохраняются.
Совместимость с ОС и браузерами
Чистые потоки DEFLATE поддерживаются встроенными средствами в современных операционных системах и веб-средах выполнения с помощью стандартных языков программирования, таких как Python, Node.js и C++. Браузеры обрабатывают DEFLATE встроенными средствами через стек заголовков кодирования содержимого HTTP. Операционные системы, такие как Windows, macOS и Linux, поддерживают чистые потоки через системные библиотеки сжатия, такие как zlib. Мобильные платформы, включая Android и iOS, предоставляют прямой доступ к процедурам DEFLATE через API для пользовательских уровней хранения приложений.
Полезная информация
Всегда проверяйте, ожидает ли Ваш целевой парсер чистый поток RFC 1951, а не поток, обернутый в zlib, поскольку zlib добавляет двухбайтовый заголовок, который парсеры чистого DEFLATE отвергнут.
Часто задаваемые вопросы
Как конвертировать поток GZIP в чистый DEFLATE без потери качества?
Оба формата используют одинаковые алгоритмы сжатия без потерь. Для преобразования нужно прочитать контейнер GZIP, удалить десятибайтовый заголовок и восьмибайтовый трейлер и сохранить внутренние сжатые блоки. Данные не теряются, так как лежащий в основе алгоритм остается неизменным.
В чем разница между потоком GZIP и чистым DEFLATE?
GZIP - это полноценный файловый контейнер, который включает заголовок с сигнатурой, исходные имена файлов, временные метки изменения и трейлер с контрольной суммой. Чистый DEFLATE - это просто сжатые данные без заголовков, трейлеров и метаданных файла.