2009-11-11 42 views
2

我有一些數據在未壓縮文件中佔用超過50MB,但使用gzip將其壓縮到不到半個MB。如何使用Java處理壓縮數據

大部分是數值數據。我試圖弄清楚如何處理這些數據,而不必完全解壓。例如,如果這個數據包含幾個字符串和每個記錄5個左右的數字值,有沒有辦法可以解壓縮一行(或一小組行),然後處理它們,然後丟棄它們?

Unix提供的工具如zcatgrep等直接對壓縮數據進行操作,我想在Java中也這樣做。

感謝

+0

50MB並不多... – 2009-11-11 08:44:05

+0

基於Unix工具基本上是解壓縮整個文件,當您與工作內容(除非所有的gzip管道應用程序完成而不讀取全部)。換句話說,它們的行爲不像你想讓你的Java程序行爲一樣。 – 2009-11-11 09:06:56

+0

@Thorbjørn:你指的是哪些工具?除非您告訴他們將輸出寫入文件,否則大多數工具都會進行解壓縮。 – 2009-11-11 11:56:33

回答

7

只是包裝你在FileInputStream一個GZipInputStream

public static BufferedReader createReader (File f, String encoding) throws IOException 
{ 
    try 
    { 
     InputStream in = new FileInputStream (f); 
     if (f.getName().endsWith (".gz")) 
      in = new GZIPInputStream (in, 10240); 

     return new BufferedReader (new InputStreamReader (in, encoding)); 
    } 
    catch (UnsupportedEncodingException e) 
    { 
     throw new RuntimeException("Missing encoding "+encoding, e); 
    } 
}