Формат архива 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:
- Заголовок. Заголовок содержит метаданные об архиве XZ, включая версию формата, флаги и любые используемые дополнительные расширения. Это также указывает на наличие контрольных сумм целостности данных.
- Поток сжатых данных. Ядром архива XZ является поток сжатых данных. В этом разделе содержатся собственно данные файла, сжатые с помощью алгоритма LZMA2. Поток данных делится на блоки, что обеспечивает эффективное сжатие и распаковку. Каждый блок можно распаковать независимо, что помогает восстановить данные, даже если архив частично поврежден.
- Нижний колонтитул: нижний колонтитул содержит контрольную сумму CRC32, которая проверяет целостность архива. Он также отмечает конец потока сжатых данных и может содержать дополнительную информацию, например индекс блоков, для быстрого доступа.
Методы сжатия XZ
Формат XZ в основном основан на алгоритме сжатия LZMA2, который известен своей высокой степенью сжатия и разумной скоростью распаковки. Вот более детальный взгляд на методы сжатия, связанные с XZ:
- LZMA2: это метод сжатия по умолчанию и единственный, используемый архивами XZ. LZMA2 основан на алгоритме LZ77 и включает расширенное энтропийное кодирование, что делает его очень эффективным при сжатии больших файлов. Он предлагает регулируемые настройки сжатия, позволяя пользователям устанавливать приоритет скорости или коэффициента сжатия в зависимости от их потребностей.
- Фильтры. Помимо LZMA2 , XZ поддерживает различные дополнительные фильтры, которые можно применять перед сжатием для дальнейшего уменьшения размера файла. К ним относятся дельта-кодирование, которое полезно для сжатия данных с небольшими повторяющимися изменениями, и BCJ (ветвь/вызов/переход), которое оптимизирует сжатие исполняемого кода путем преобразования определенных инструкций в более сжимаемые формы.
- Контрольные суммы CRC32 и SHA-256. Архивы XZ, хотя и не являются методами сжатия как таковые, используют контрольные суммы CRC32 для проверки целостности и дополнительно поддерживают SHA-256 для расширенной проверки данных, гарантируя, что сжатые данные не были повреждены или подделаны.
Поддерживаемые операции .xz
Aspose.Zip предлагает комплексную поддержку работы с архивами .xz, что упрощает управление сжатыми файлами. Вот что вы можете сделать:
- Полное извлечение. Легко извлекайте все файлы из архива .xz, сохраняя целостность и структуру исходного содержимого.
- Выборочное извлечение. Нацеливайтесь на определенные файлы в архиве .xz, что позволяет точно восстановить данные или выборочно распаковать их на основе имен файлов или других критериев.
- Сжатие данных. Создавайте архивы .xz из файлов и каталогов, используя эффективный метод сжатия LZMA2 для значительного уменьшения размера файлов.
- Пользовательские настройки сжатия. Настройте уровни сжатия и другие параметры, чтобы сбалансировать скорость сжатия и размер файла, адаптируя процесс к вашим конкретным потребностям.
Структура файла .XZ
Формат файла .xz в основном используется для сжатия и упаковки данных. Он использует алгоритм LZMA2 для достижения высокой степени сжатия. Вот обзор структуры архива .xz:
Заголовок потока:
- Волшебные байты: первые 6 байтов (FD 37 7A 58 5A 00) идентифицируют файл как архив .xz.
- Флаги потока: включает такие сведения, как размер блока и параметры сжатия.
Заголовок блока:
- Размер блока: указывает размер следующего блока.
- Метод сжатия: указывает используемый алгоритм (обычно LZMA2).
- Цепочки фильтров: подробно описаны любые дополнительные фильтры, примененные до или после сжатия.
Сжатые блоки данных:
- Данные: фактические данные, сжатые с использованием алгоритма LZMA2.
- CRC32: контрольная сумма, используемая для проверки целостности сжатых данных.
Указательный раздел:
- Индексные данные: предоставляют смещения для каждого блока и несжатый размер, обеспечивая произвольный доступ к сжатому потоку.
- Индекс CRC32: обеспечивает целостность раздела индекса.
Нижний колонтитул трансляции:
- Флаги потока: повторяет флаги потока из заголовка в целях проверки.
- Обратный размер: размер индексного раздела, позволяющий обратный обход файла.
- Магические байты: файл заканчивается 2-байтовой последовательностью (59 5A), обозначающей конец архива .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");
}
Дополнительная информация
Часто Задаваемые Вопросы
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.