Java - читать BZ2 файл и распаковывать/разбирать на лету

У меня есть довольно большой файл BZ2, в котором есть несколько текстовых файлов. Возможно ли, чтобы я использовал Java для разблокировки определенных файлов внутри файла BZ2 и разархивирования/анализа данных на лету? Скажем, что файл 300mb BZ2 содержит 1 ГБ текста. В идеале, я хотел бы, чтобы моя программа Java говорила, что прочитала 1 мб файла BZ2, распакуйте ее на лету, действуйте на ней и продолжайте читать файл BZ2 для получения дополнительных данных. Возможно ли это?

Спасибо

Ответ 1

Библиотека commons-compress из apache довольно хороша. Здесь их образцы страницы: http://commons.apache.org/proper/commons-compress/examples.html

Вот последний фрагмент maven:

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

И вот мой метод использования:

public static BufferedReader getBufferedReaderForCompressedFile(String fileIn) throws FileNotFoundException, CompressorException {
    FileInputStream fin = new FileInputStream(fileIn);
    BufferedInputStream bis = new BufferedInputStream(fin);
    CompressorInputStream input = new CompressorStreamFactory().createCompressorInputStream(bis);
    BufferedReader br2 = new BufferedReader(new InputStreamReader(input));
    return br2;
}

Ответ 2

Проект Ant содержит bzip2 библиотеку. Что имеет класс org.apache.tools.bzip2.CBZip2InputStream. Вы можете использовать этот класс для распаковки файла bzip2 на лету - он просто расширяет стандартный класс Java InputStream.