Формат архива GZIP

GZIP — популярный формат файлов и программное приложение, используемое для сжатия и распаковки файлов. Он был разработан как бесплатный алгоритм сжатия с открытым исходным кодом Жаном-Лу Гайи и Марком Адлером в начале 1990-х годов. Название «GZIP» означает GNU ZIP, что указывает на его связь с проектом GNU.
Сжатие GZIP уменьшает размер файлов, упрощая их передачу по сети или хранение на диске. Сжатие достигается за счет замены повторяющихся строк данных ссылками, тем самым уменьшая избыточность и общий размер файла. GZIP особенно эффективен для сжатия текстовых файлов, таких как HTML, CSS, JavaScript, XML и JSON, но его также можно использовать для сжатия файлов других типов.

Информация об архиве GZIP

Информация об архиве GZIP относится к метаданным и данным, содержащимся в файле, сжатом с использованием алгоритма сжатия GZIP. Архивы GZIP обычно содержат такую ​​информацию, как атрибуты файла, временные метки, метод сжатия и другие соответствующие данные, необходимые для распаковки и восстановления файлов. Эти метаданные имеют решающее значение для правильной идентификации и обработки сжатых файлов.
Кроме того, информация об архиве GZIP может также включать сведения о самом процессе сжатия, такие как уровень сжатия, контрольные суммы и любые дополнительные флаги или параметры, используемые во время сжатия. Эта информация необходима для обеспечения целостности и правильности сжатых данных при их распаковке. В целом, понимание архивной информации GZIP жизненно важно для эффективного управления и работы со сжатыми файлами, будь то для хранения данных, передачи по сети или в целях архивирования.

Эволюция формата архива GZIP

Формат архивов GZIP берет свое начало в конце 1980-х годов, когда Жан-Лу Гайи и Марк Адлер разработали алгоритм сжатия GZIP в рамках проекта GNU. GZIP означает GNU ZIP, что отражает его происхождение в рамках проекта GNU. Целью было создать инструмент сжатия, который мог бы эффективно уменьшать размер файлов, сохраняя при этом совместимость с различными компьютерными системами.
Жан-Лу Гайи и Марк Адлер разработали программу как бесплатную альтернативу утилите сжатия, использовавшейся в ранних системах Unix. Он был разработан как часть проекта GNU, отсюда и буква «g» в gzip. Первоначальный выпуск, версия 0.1, стал доступен публике 31 октября 1992 года, а в феврале 1993 года последовала версия 1.0.

GZIP-структура

GZIP использует алгоритм DEFLATE, который объединяет методы кодирования LZ77 и Хаффмана. DEFLATE был разработан для замены LZW и других алгоритмов сжатия, обремененных патентами, которые ограничивали эффективность сжатия и аналогичных утилит архивирования, распространенных в то время. Формат файла GZIP имеет четко определенную структуру, состоящую из трех основных частей:

  • Заголовок (10 байт): В этом разделе представлена ​​важная информация об архиве и его содержимом. Вот разбивка данных заголовка
  • Магическое число (4 байта): идентифицирует файл как архив GZIP. Он имеет определенное шестнадцатеричное значение (1f 8b), которое распознают инструменты декомпрессии.
  • Метод сжатия (1 байт): Этот байт обычно содержит значение 8, что указывает на алгоритм сжатия DEFLATE, используемый GZIP.
  • Флаги заголовка (1 байт): Эти флаги управляют конкретными аспектами распаковки, такими как кодировка имени файла или наличие комментария.
  • Время создания (4 байта): В этом разделе хранится временная метка Unix, указывающая время создания архива.
  • CRC-32 (4 байта): Это значение проверки циклическим избыточным кодом используется для обнаружения ошибок во время распаковки. Он рассчитывается на основе несжатых данных и позволяет программе распаковки проверять целостность извлеченных файлов.

Преимущества этого формата

  • Сжатие без потерь: GZIP сжимает данные без потери информации. В отличие от некоторых методов сжатия, исходные файлы можно полностью восстановить после распаковки. Это крайне важно для важных документов, изображений или кода, где сохранение целостности данных имеет важное значение.
  • Широкая совместимость: Одним из самых сильных преимуществ GZIP является его широкое распространение. Он поддерживается большинством операционных систем, утилит архивирования (WinRAR, 7-Zip) и веб-серверов. Это гарантирует, что вы сможете легко открывать файлы GZIP на различных платформах без необходимости использования специального программного обеспечения. Кроме того, GZIP широко поддерживается в различных операционных системах, включая системы на базе Unix, Linux, Windows и macOS. Эта кросс-платформенная совместимость гарантирует, что файлы, сжатые GZIP, можно легко создавать и распаковывать в различных средах.
  • Потоковое сжатие: GZIP поддерживает потоковое сжатие, позволяя сжимать или распаковывать файлы «на лету», не дожидаясь обработки всего файла. Это делает его подходящим для сценариев, в которых данные генерируются или передаются непрерывно, например, для сетевых коммуникаций и операций резервного копирования данных.
  • Открытый стандарт. GZIP – это открытый и широко распространенный стандарт сжатия файлов, спецификации которого общедоступны. Такая открытость способствует взаимодействию и совместимости различных программных приложений и систем, создавая динамичную экосистему инструментов и библиотек для работы с файлами, сжатыми GZIP. Использование GZIP, как правило, просто. Многие инструменты и программное обеспечение автоматически сжимают или распаковывают файлы в этом формате. Кроме того, процесс декомпрессии эффективен и требует минимальных ресурсов.

Операции, поддерживаемые архивом GZIP

Aspose.ZIP позволяет пользователю извлечь конкретную запись или весь архив. Для Aspose.ZIP для .NET. Вы можете использовать GzipArchiveClass, чтобы открыть файл .gz, а затем перебирать его записи, извлекая их в нужное место. Для Aspose.ZIP для Java Аналогичный подход использует GzipArchive для открытия файла .gz и извлечения записей.

GZIP-файл – Внутренняя структура

Архив GZIP похож на аккуратно упакованный пакет. Он начинается с 10-байтового заголовка, представляющего формат и метод сжатия. Сердце лежит в разделе сжатых данных, сжатых с помощью умных алгоритмов. Наконец, 8-байтовый нижний колонтитул проверяет целостность данных с помощью контрольных сумм, гарантируя безопасную доставку файлов после распаковки.

GZIP-файл – Внутренняя структура

Внутренняя структура архива

  • Метаданные файла. Подобно tar-архиву, каждый файл хранит основную информацию, такую ​​как время изменения и разрешения. Однако этот раздел является гибким и позволяет опускать или включать дополнительные детали, такие как списки управления доступом (ACL) или расширенные атрибуты (EA), в зависимости от ваших потребностей. Рекомендуется включать надежную хеш-функцию (например, SHA1) для обычных файлов, чтобы обеспечить целостность данных.
  • Несколько потоков контента. В отличие от традиционных архивов, файлы могут иметь более одного потока данных во внутреннем файле данных. Это полезно для хранения расширенных атрибутов или ветвей ресурсов, связанных с файлом.
  • Заголовки. Внутренний индексный файл содержит заголовки файлов, зеркально отображающие заголовки, разбросанные по всему внутреннему файлу данных. Но при раздельном хранении заголовки индексов должны ссылаться на начальную позицию соответствующих им данных в файле данных. Кроме того, записи каталога в индексе перечисляют содержащиеся в них файлы и соответствующие им смещения во внутреннем файловом индексе.
  • Обоснование дублирования метаданных. Такой выбор конструкции обеспечивает как эффективную потоковую передачу/декодирование данных, так и произвольный доступ к файлам. Кроме того, метаданные хорошо сжимаются, что приводит к минимальным затратам на хранение. Тесты показывают, что метаданные обычно занимают менее 0,3% дискового пространства, поэтому компромисс оправдан.
  • Заголовки блоков. Заголовки блоков, как и внешний файл, содержат информацию о размере блока и последовательность уникальных идентификаторов.

Примеры использования GZIP

API Aspose.ZIP позволяет извлекать архивы в ваших приложениях без необходимости использования каких-либо других сторонних приложений. Aspose.ZIP API предоставляет класс GzipArchive для работы с архивами GZIP.

GZIP with compress only single source via C#

Such archives like GZIP, LZ, BZIP2, XZ, Z do not support entries and can compress only single source. See samples with such a compression.

    using (FileStream source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
    {
        using (GzipArchive archive = new GzipArchive())
        {
            archive.SetSource(source);
            archive.Save(«archive.gz);
        }
    }

Aspose.Zip offers individual archive processing APIs for popular development environments, listed below:

Aspose.Zip for .NETAspose.Zip via JavaAspose.Zip via Python.NET

Дополнительная информация о GZIP-архивах

Часто Задаваемые Вопросы

1. Что такое GZIP?

GZIP (архив GNU ZIP) — популярный формат файлов, который уменьшает размер файлов для облегчения хранения и передачи.

2. Чем сжатие GZIP отличается от других форматов, таких как ZIP?

GZIP обычно предлагает более высокую степень сжатия по сравнению с ZIP, особенно при сжатии текстовых файлов. Однако архивы ZIP часто включают поддержку нескольких файлов и каталогов, что делает их более универсальными для упаковки нескольких файлов вместе. .

3. Может ли GZIP сжать несколько файлов в один архив?

GZIP предназначен для сжатия одного файла, а не нескольких файлов или каталогов. Однако обычно используются такие инструменты, как tar, в сочетании с GZIP для создания tar-архива tar-архива , а затем сожмите его с помощью GZIP, чтобы создать один сжатый файл.