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

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

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

решение1

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

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

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

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

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

Связанный контент