Распаковать архив BZIP2

Я могу распаковать файлы zip, gzip и rar, но мне также нужно распаковать файлы bzip2, а также разархивировать их (.tar). Я не встречал хорошей библиотеки для использования.

Я использую Java вместе с Maven, поэтому в идеале я хотел бы включить его как зависимость в POM.

Какие библиотеки вы рекомендуете?


person Community    schedule 24.02.2010    source источник


Ответы (2)


Наилучший вариант, который я вижу, - это Apache Commons Compress с этой зависимостью Maven.

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-compress</artifactId>
  <version>1.0</version>
</dependency>

Из примеров:

FileInputStream in = new FileInputStream("archive.tar.bz2");
FileOutputStream out = new FileOutputStream("archive.tar");
BZip2CompressorInputStream bzIn = new BZip2CompressorInputStream(in);
final byte[] buffer = new byte[buffersize];
int n = 0;
while (-1 != (n = bzIn.read(buffer))) {
  out.write(buffer, 0, n);
}
out.close();
bzIn.close();
person cletus    schedule 24.02.2010
comment
Чтобы скопировать потоки, вы также можете использовать Apache Commons IO's IOUtils.copyLarge. - person thSoft; 01.08.2015

Не забывайте использовать буферизованные потоки, чтобы получить 3-кратное ускорение!

public void decompressBz2(String inputFile, String outputFile) throws IOException {
    var input = new BZip2CompressorInputStream(new BufferedInputStream(new FileInputStream(inputFile)));
    var output = new FileOutputStream(outputFile);
    try (input; output) {
        IOUtils.copy(input, output);
    }
}

decompressBz2("example.bz2", "example.txt");

С build.gradle.kts:

dependencies {
    ...
    implementation("org.apache.commons:commons-compress:1.20")
}
person diralik    schedule 30.11.2020