
我們有大文件,需要進行模式搜尋。看起來當我們使用 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