Pesquisando em um arquivo compactado (.gz) usando java

Pesquisando em um arquivo compactado (.gz) usando java

Temos arquivos grandes onde precisamos fazer pesquisas de padrões. Parece que quando usamos GZIPInputStream ele descompacta o arquivo na memória e então preciso pesquisá-lo. Na memória, um arquivo descompactado, por exemplo, tomando 600 MB e obtemos pelo menos 10 solicitações ao nosso servidor e não podemos nos dar ao luxo de pesquisar arquivos de 2 ou 3 GB na pesquisa de memória. O que procuramos é se temos uma maneira de descompactar linha por linha e fazer a pesquisa? (ou) qualquer outra solução para este problema.

Responder1

ZLib suporta descompactação parcial e sequencial, então você pode ler uma parte do arquivo gzip (mas lembre-se que os arquivos gzip têm um cabeçalho) e chamar util.zip.Inflater com o número de bytes dos quais deseja inflar.

Observe em particular o método

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

isso permite que você comece off bytes no arquivo gzip e leia e descompacte len bytes a partir desse ponto.

Javadoc está aqui:http://docs.oracle.com/javase/6/docs/api/java/util/zip/Inflater.html

informação relacionada