Как обрабатывать сжатые данные в Java - PullRequest
2 голосов
/ 11 ноября 2009

У меня есть некоторые данные, которые занимают более 50 МБ в несжатом файле, но сжимают до менее половины МБ с помощью gzip.

Большая часть это числовые данные. Я пытаюсь понять, как обрабатывать эти данные, не распаковывая их полностью. Например, если эти данные содержат пару строк и 5 или около того числовых значений на запись, есть ли способ распаковать одну строку (или небольшой набор строк), обработать их, а затем отбросить их?

Unix предоставляет такие утилиты, как zcat, grep и т. Д., Которые работают непосредственно со сжатыми данными, я бы хотел сделать то же самое в Java.

Спасибо

1 Ответ

7 голосов
/ 11 ноября 2009

Просто оберните FileInputStream в GZipInputStream:

public static BufferedReader createReader (File f, String encoding) throws IOException
{
    try
    {
        InputStream in = new FileInputStream (f);
        if (f.getName ().endsWith (".gz"))
            in = new GZIPInputStream (in, 10240);

        return new BufferedReader (new InputStreamReader (in, encoding));
    }
    catch (UnsupportedEncodingException e)
    {
        throw new RuntimeException("Missing encoding "+encoding, e);
    }
}
...