%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%20%D1%81%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC%20Java.png)
У нас есть большие файлы, в которых нам нужно выполнить поиск по шаблону. Похоже, когда мы используем 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