Поиск в сжатом (.gz) файле с использованием Java

У нас есть большие файлы, в которых нам нужно выполнить поиск по шаблону. Похоже, когда мы используем GZIPInputStream, он распаковывает файл в памяти, а затем мне нужно сделать поиск по нему. В памяти один несжатый файл, например, занимающий 600 МБ, и мы получаем по крайней мере 10 запросов к нашему серверу, и мы не можем позволить себе поиск 2 или 3 ГБ файлов при поиске в памяти. Что мы ищем, так это то, что у нас есть способ распаковывать строку за строкой и выполнять поиск? (или) любое другое решение этой проблемы.

1 ответ

ZLib поддерживает частичную и последовательную декомпрессию, поэтому вы можете прочитать часть gzip-файла (но помните, что gzip-файлы имеют заголовок) и вызвать util.zip.Inflater с количеством байтов, из которых вы хотите накачать.

Обратите особое внимание на метод

setInput(byte[] b, int off, int len)

это позволяет вам начинать с байтов в файле gzip и считывать и распаковывать len байты с этой точки.

Javadoc находится здесь: http://docs.oracle.com/javase/6/docs/api/java/util/zip/Inflater.html

Другие вопросы по тегам