Gzip - это
утилита сжатия и декомпрессии файлов, использующая алгоритм Deflate, применяемая в основном в UNIX-системах, в ряде которых является стандартом для сжатия данных. Была создана Жан-Лу Галли и Марком Адлером 31 октября 1992 года.
Free Software Foundation
GNU General Public License
gzip.org
Формат файлов
gzip основан на алгоритме DEFLATE, который представляет собой комбинацию кодирования LZ77 и Хаффмана. DEFLATE задумывался как замена LZW и другим запатентованным алгоритмам сжатия данных, которые в то время ограничивали удобство сжатия других архиваторов.
gzip также часто используется для обозначения формата файла gzip, который представляет собой:
- 10-байтовый заголовок, содержащий магическое число (1f 8b), идентификатор сжатия (08 для DEFLATE), флаги файлов, 32-битную метку времени, флаги сжатия и идентификатор операционной системы.
- Необязательные дополнительные заголовки, обозначаемые флажками файлов, такими как исходное имя файла
- Тело кода, содержащее информацию о нагрузке со сжатием DEFLATE
Как работает gzip
В соответствии с традициями UNIX-программирования, gzip выполняет только две функции: сжатие и распаковку одного файла; упаковка нескольких файлов в один архив невозможна. При сжатии к оригинальному расширению файла добавляется суффикс .gz. Для упаковки нескольких файлов обычно их сначала архивируют (объединяют) в один файл утилитой tar, а потом этот файл сжимают с помощью gzip. Таким образом, сжатые архивы обычно имеют двойное расширение .tar.gz, либо сокращённое .tgz.
С другой стороны, указанная особенность даёт gzip возможность работать с непрерывным потоком данных, упаковывая/распаковывая их «на лету». Это широко применяется в UNIX-системах: при помощи перенаправления потоков можно работать с упакованными файлами так же легко, как и с распакованными (распаковывая их в памяти при чтении и упаковывая при записи); многие UNIX-утилиты имеют встроенную поддержку этого механизма. В последнее время gzip активно применяется для сжатия интернет-трафика. Сейчас gzip поддерживают большинство современных браузеров.
Кроме того, существует набор утилит для поиска, вывода и сравнения данных в формате gzip: zcat, zdiff, zfgrep, zless, zcmp, zegrep, zgrep, zmore.
GZIP - сжатие без потерь
GZIP обеспечивает сжатие без потерь, исходные данные можно полностью восстановить при распаковке. Он основан на алгоритме DEFLATE, который использует комбинацию алгоритма LZ77 и алгоритма Хаффмана.
Алгоритм LZ77 заменяет повторные вхождения данных на «ссылки». Т.е. если в имеющихся данных какая-то цепочка элементов встречается более одного раза, то все последующие её вхождения заменяются «ссылками» на её первый экземпляр. Алгоритм прекрасно рассмотрен horror_x и описан здесь. Каждая такая ссылка имеет два значения: смещение и длина.
Кодирование Хаффмана является методом кодирования с переменной длиной, которая назначает более короткие коды к более частым «символам». Проблема с переменной длиной кода, как правило в том, что нам нужен способ узнать, когда код закончился и начался новый, чтобы расшифровать его. Кодирование Хаффмана решает эту проблему, создав код префикса, где ни одно кодовое слово не является префиксом другого.
DEFLATE как алгоритм, который используется в GZIP сжатии, является комбинацией обоих этих алгоритмов. Спецификация DEFLATE обеспечивает некоторую свободу разработчикам реализовать алгоритм с использованием различных подходов, пока полученный поток совместим со спецификацией.
История версий
Версия 0.1
Версия 1.0