Обзор

Хотя большинство алгоритмов сжатия изначально были разработаны для одноядерных процессоров, эра многоядерных технологий открывает значительные возможности для ускорения. Aspose.ZIP использует это, обеспечивая многоядерную оптимизацию для определенных форматов архивов.

Распараллеливание архивов BZIP2, LZIP и XZ

Распараллеливание разрешено для некоторых форматов архивов из-за их блочной природы. Aspose.ZIP использует это, применяя общий подход многоядерного сжатия на программном уровне. Пользователи могут контролировать количество потоков, используемых для сжатия, с помощью метода setCompressionThreads(int) . Если для этого значения установлено значение больше единицы, для более быстрого сжатия будут использоваться несколько ядер ЦП.

Parallel compression to BZIP2

    try (Bzip2Archive archive = new Bzip2Archive()) {
        archive.setSource("data.bin");
        Bzip2SaveOptions options = new Bzip2SaveOptions();
        options.setCompressionThreads(4);
        archive.save("archive.bz2", options);
    }

Parallel compression to XZ

    XzArchiveSettings settings = new XzArchiveSettings();
    settings.setCompressionThreads(4);
    try (XzArchive archive = new XzArchive(settings)) {
        archive.setSource("data.bin");
        archive.save("archive.xz");
    }

Parallel compression to LZ

    LzipArchiveSettings settings = new LzipArchiveSettings(16777216);
    settings.setCompressionThreads(4);
    try (LzipArchive archive = new LzipArchive(settings)) {
        archive.setSource("data.bin");
        archive.save("archive.lz");
    }

В примере 1 показано создание архива Bzip2 с использованием класса Bzip2Archive. Сначала мы указываем исходный файл для сжатия с помощью метода archive.setSource("data.bin"). Далее, с помощью объекта Bzip2SaveOptions можно настроить различные параметры сжатия, включая количество потоков сжатия. Наконец, архив сохраняется с указанными параметрами с помощью метода archive.save("archive.bz2", options).
Во втором примере мы настраиваем параметры сжатия для формата xz перед созданием архива. Эта настройка осуществляется с помощью объекта XzArchiveSettings, где мы указываем желаемое количество потоков сжатия. Затем создается новый XzArchive с этими настройками, передаваемыми в качестве аргумента. После этого исходный файл ("data.bin") устанавливается в качестве источника для сжатия, а архив сохраняется с помощью метода archive.save("archive.xz").
В третьем примере мы демонстрируем создание LZ-архива с помощью объекта LzipArchiveSettings. Сначала мы устанавливаем размер словаря, используемого при сжатии LZMA. Далее мы устанавливаем количество потоков равным 4. После этого мы создаем объект LzipArchive и передаем объект LzipArchiveSettings конструктору. Наконец, мы указываем файл для архивирования и сохраняем архив.

Сжатие LZMA2 и многопоточность в архивах 7Z

Один из методов сжатия в формате 7z, LZMA2 , поддерживает многопоточное сжатие. Подобно предыдущим форматам архивов, вы можете контролировать количество используемых потоков с помощью метода setCompressionThreads(int).

    SevenZipLZMA2CompressionSettings compSettings = new SevenZipLZMA2CompressionSettings();
    compSettings.setCompressionThreads(4);
    SevenZipEntrySettings settings = new SevenZipEntrySettings(compSettings);
    try (SevenZipArchive archive = new SevenZipArchive(settings)) {
        archive.createEntry("first.bin", "data.bin");
        archive.save("result.7z");
    }
  • Настройки сжатия. Мы начинаем с создания настроек сжатия с помощью объекта SevenZipLZMA2CompressionSettings. В этом примере количество потоков сжатия установлено равным 4.
  • Настройки ввода: Затем создается объект SevenZipEntrySettings, которому присваиваются параметры сжатия, которые мы определили ранее. На этом этапе настраивается сжатие для каждой отдельной записи в архиве.
  • Создание архива: Имея все настройки, мы создаем объект SevenZipArchive и передаем ему настройки записи. Этот архив будет содержать одну запись с именем «first.bin», соответствующую исходному файлу «data.bin».
  • Сохранение архива: Наконец, созданный архив сохраняется. как "result.7z" с помощью метода save("result.7z").

Ускорьте ZIP-архивирование с помощью параллельного сжатия

Распараллеливание для более быстрой обработки было реализовано на уровне блоков или алгоритмов для предыдущих форматов архивов в Aspose.ZIP. Однако ZIP-архивы предлагают уникальное преимущество: распараллеливание начального уровня во время сохранения. Чтобы включить это, создайте экземпляр объекта ParallelOptions при сохранении ZIP-архива.

    try (Archive archive = new Archive()) {
        archive.createEntries("C:\\Data");
        ParallelOptions parOptions = new ParallelOptions();
        parOptions.setParallelCompressInMemory(ParallelCompressionMode.Auto);
        ArchiveSaveOptions options = new ArchiveSaveOptions();
        options.setParallelOptions(parOptions);
        archive.save("archive.zip", options);
    } 

Этот код использует параллельное сжатие для оптимизации создания архива и создает ZIP-архив с именем «archive.zip» из всех файлов в папке «C:\Data».

Другие поддерживаемые функции Aspose.ZIP для Java API

С помощью библиотеки Aspose.ZIP на Java вы можете легко решать различные задачи, связанные с документами в формате ZIP. Если вам нужно конвертировать форматы, объединять файлы, редактировать содержимое или извлекать данные, Aspose.ZIP предоставляет комплексные функциональные возможности для оптимизации вашего рабочего процесса и повышения производительности.

  

Support and Learning Resources

  
  

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