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

XZ — это архивный формат с высокой степенью сжатия, в основном используемый для сжатия отдельных файлов, обеспечивающий превосходную эффективность сжатия и совместимость с открытым исходным кодом. Этот формат, разработанный в рамках XZ Utils, известен использованием алгоритма сжатия LZMA2, который обеспечивает высокую степень сжатия при сохранении разумной скорости распаковки. Архивы XZ широко используются при распространении пакетов программного обеспечения, особенно в Unix-подобных операционных системах, таких как Linux.

Общая информация об архиве XZ

Архивы XZ предназначены для обеспечения эффективного сжатия с упором на уменьшение размера файлов при хранении и распространении. В этом формате используется алгоритм LZMA2, который сочетает в себе словарное сжатие и энтропийное кодирование, что делает его очень эффективным для сжатия больших файлов. Архивы XZ обычно содержат один сжатый файл, но их можно комбинировать с другими инструментами, такими как tar, для сжатия целых каталогов. Формат XZ часто используется при распространении программного обеспечения, резервном копировании и архивировании данных, особенно в экосистеме Linux, где он стал стандартом для упаковки обновлений программного обеспечения и системы.

Информация об истории XZ

  • 2005: Формат XZ начал разработку в рамках проекта XZ Utils, целью которого было создание более эффективного преемника старого формата LZMA.
  • 2009: Был официально выпущен XZ Utils, представивший формат XZ как новый стандарт для задач высокого сжатия.
  • 2010: XZ начал набирать популярность в сообществе Linux, быстро став предпочтительным форматом для сжатия пакетов программного обеспечения и системных архивов.
  • 2011: Основные дистрибутивы Linux, включая Debian и Arch Linux, начали использовать XZ в качестве формата сжатия по умолчанию для своих репозиториев пакетов.
  • 2014: использование XZ вышло за пределы Linux, и он стал популярным для кроссплатформенного распространения программного обеспечения, особенно для приложений, требующих высокой степени сжатия.
  • 2020: XZ по-прежнему широко используется в упаковке программного обеспечения, хранении и распространении данных, особенно в средах, где эффективное сжатие имеет решающее значение.

Структура XZ-архива

Формат архива XZ предназначен для сжатия отдельных файлов и использует простую структуру для достижения высокой степени сжатия. Вот обзор структуры архива XZ:

  1. Заголовок. Заголовок содержит метаданные об архиве XZ, включая версию формата, флаги и любые используемые дополнительные расширения. Это также указывает на наличие контрольных сумм целостности данных.
  2. Поток сжатых данных. Ядром архива XZ является поток сжатых данных. В этом разделе содержатся собственно данные файла, сжатые с помощью алгоритма LZMA2. Поток данных делится на блоки, что обеспечивает эффективное сжатие и распаковку. Каждый блок можно распаковать независимо, что помогает восстановить данные, даже если архив частично поврежден.
  3. Нижний колонтитул: нижний колонтитул содержит контрольную сумму CRC32, которая проверяет целостность архива. Он также отмечает конец потока сжатых данных и может содержать дополнительную информацию, например индекс блоков, для быстрого доступа.

Методы сжатия XZ

Формат XZ в основном основан на алгоритме сжатия LZMA2, который известен своей высокой степенью сжатия и разумной скоростью распаковки. Вот более детальный взгляд на методы сжатия, связанные с XZ:

  1. LZMA2: это метод сжатия по умолчанию и единственный, используемый архивами XZ. LZMA2 основан на алгоритме LZ77 и включает расширенное энтропийное кодирование, что делает его очень эффективным при сжатии больших файлов. Он предлагает регулируемые настройки сжатия, позволяя пользователям устанавливать приоритет скорости или коэффициента сжатия в зависимости от их потребностей.
  2. Фильтры. Помимо LZMA2 , XZ поддерживает различные дополнительные фильтры, которые можно применять перед сжатием для дальнейшего уменьшения размера файла. К ним относятся дельта-кодирование, которое полезно для сжатия данных с небольшими повторяющимися изменениями, и BCJ (ветвь/вызов/переход), которое оптимизирует сжатие исполняемого кода путем преобразования определенных инструкций в более сжимаемые формы.
  3. Контрольные суммы CRC32 и SHA-256. Архивы XZ, хотя и не являются методами сжатия как таковые, используют контрольные суммы CRC32 для проверки целостности и дополнительно поддерживают SHA-256 для расширенной проверки данных, гарантируя, что сжатые данные не были повреждены или подделаны.

Поддерживаемые операции .xz

Aspose.Zip предлагает комплексную поддержку работы с архивами .xz, что упрощает управление сжатыми файлами. Вот что вы можете сделать:

  • Полное извлечение. Легко извлекайте все файлы из архива .xz, сохраняя целостность и структуру исходного содержимого.
  • Выборочное извлечение. Нацеливайтесь на определенные файлы в архиве .xz, что позволяет точно восстановить данные или выборочно распаковать их на основе имен файлов или других критериев.
  • Сжатие данных. Создавайте архивы .xz из файлов и каталогов, используя эффективный метод сжатия LZMA2 для значительного уменьшения размера файлов.
  • Пользовательские настройки сжатия. Настройте уровни сжатия и другие параметры, чтобы сбалансировать скорость сжатия и размер файла, адаптируя процесс к вашим конкретным потребностям.

Структура файла .XZ

Формат файла .xz в основном используется для сжатия и упаковки данных. Он использует алгоритм LZMA2 для достижения высокой степени сжатия. Вот обзор структуры архива .xz:

  1. Заголовок потока:

    • Волшебные байты: первые 6 байтов (FD 37 7A 58 5A 00) идентифицируют файл как архив .xz.
    • Флаги потока: включает такие сведения, как размер блока и параметры сжатия.
  2. Заголовок блока:

    • Размер блока: указывает размер следующего блока.
    • Метод сжатия: указывает используемый алгоритм (обычно LZMA2).
    • Цепочки фильтров: подробно описаны любые дополнительные фильтры, примененные до или после сжатия.
  3. Сжатые блоки данных:

    • Данные: фактические данные, сжатые с использованием алгоритма LZMA2.
    • CRC32: контрольная сумма, используемая для проверки целостности сжатых данных.
  4. Указательный раздел:

    • Индексные данные: предоставляют смещения для каждого блока и несжатый размер, обеспечивая произвольный доступ к сжатому потоку.
    • Индекс CRC32: обеспечивает целостность раздела индекса.
  5. Нижний колонтитул трансляции:

    • Флаги потока: повторяет флаги потока из заголовка в целях проверки.
    • Обратный размер: размер индексного раздела, позволяющий обратный обход файла.
    • Магические байты: файл заканчивается 2-байтовой последовательностью (59 5A), обозначающей конец архива .xz.
  6. Необязательные метаданные:

    • Некоторые архивы .xz могут включать дополнительные метаданные для специальных функций или расширенных функций, таких как пользовательские фильтры или шифрование.

Структура файла .XZ

Популярность формата XZ

Формат файла .xz приобрел значительную популярность, особенно в сообществах Linux и разработчиков открытого исходного кода, благодаря высокой степени сжатия и эффективному использованию ресурсов. Он широко используется для сжатия пакетов программного обеспечения, распространения исходного кода и архивирования больших наборов данных. Набор инструментов XZ Utils обеспечивает надежную поддержку создания, извлечения и управления файлами .xz на различных платформах, включая Linux, macOS и Windows. Хотя формат .xz не так широко распространен в средах Windows, как ZIP или CAB , он ценится за баланс между эффективностью сжатия и производительностью, что делает его предпочтительным выбором для разработчиков и системных администраторов. Кроме того, .xz интегрирован во многие системы управления пакетами, такие как APT Debian и Pacman Arch Linux, что еще больше укрепляет его роль в экосистеме распространения программного обеспечения.

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

В этом разделе представлены примеры кода, демонстрирующие, как сжимать и распаковывать архивы XZ с помощью C# и Java. В этих примерах для взаимодействия с файлами XZ используются такие библиотеки, как Aspose.Zip для C# и встроенный класс XzArchive (в зависимости от среды Java).

Compress XZ File via C#

    using (FileStream xzFile = File.Open("data.bin.xz", FileMode.Create))
    {
        using (FileStream source = File.Open("data.bin", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new XzArchive(Aspose.Zip.Xz.Settings.XzArchiveSettings.FastestSpeed))
            {
                archive.SetSource(source);
                archive.Save(xzFile);
            }
        }
    }

Open XZ Archive via C#

    using (var archive = new XzArchive("data.bin.xz"))
    {
        archive.Extract("data.bin");
    }

Compress XZ File via C#

    try (FileOutputStream xzFile = new FileOutputStream("data.bin.xz")) {
        try (FileInputStream source = new FileInputStream("data.bin")) {
            try (XzArchive archive = new XzArchive(XzArchiveSettings.getFastestSpeed())) {
                archive.setSource(source);
                archive.save(xzFile);
            }
        }
    } catch (IOException ex) {
    }

Open XZ Archive via Java

    try (XzArchive archive = new XzArchive("data.bin.xz")) {
        archive.extract("data.bin");
    }

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

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

Дополнительная информация

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

1. Поддерживается ли .xz во всех операционных системах?

Хотя .xz чаще всего используется в средах Linux, он поддерживается во всех основных операционных системах. Такие инструменты, как XZ Utils, доступны для Windows и macOS, а также поддерживаются кроссплатформенные инструменты, такие как 7-Zip . файлы .xz.

2. Каковы преимущества использования файлов XZ?

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

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

В отличие от таких форматов, как ZIP или TAR , .xz обычно используется для сжатия одного файла. Если вы хотите сжать несколько файлов, сначала необходимо заархивировать их в один файл (используя Aspose.Zip API , чтобы создать файл .tar ) а затем сожмите архив с помощью .xz, в результате чего получится файл .tar.xz.