我们有大型文件,需要在其中进行模式搜索。看起来当我们使用 GZIPInputStream 时,它会在内存中解压缩文件,然后我需要对其进行搜索。在内存中,一个未压缩的文件例如占用 600MB,我们的服务器至少收到 10 个请求,我们无法在内存搜索中搜索 2 或 3GB 的文件。我们正在寻找的是,我们是否有办法逐行解压缩并进行搜索?(或)此问题的其他解决方案。
答案1
ZLib 支持部分和顺序解压缩,因此您可以读取 gzip 文件的一部分(但请记住 gzip 文件有一个标头)并使用要膨胀的字节数调用 util.zip.Inflater。
特别注意方法
setInput(byte[] b, int off, int len)
它可以让你从 gzip 文件中的 off 字节开始,然后从该点读入并解压缩 len 字节。
Javadoc 在这里:http://docs.oracle.com/javase/6/docs/api/java/util/zip/Inflater.html