2011-05-16 66 views
0

基本上,我有這樣的代碼來解壓縮一些字符串,在一個文件存儲:的Java NIO和的FileInputStream

public static String decompressRawText(File inFile) { 
    InputStream in = null; 
    InputStreamReader isr = null; 
    StringBuilder sb = new StringBuilder(STRING_SIZE); 
    try { 
     in = new FileInputStream(inFile); 
     in = new BufferedInputStream(in, BUFFER_SIZE); 
     in = new GZIPInputStream(in, BUFFER_SIZE); 
     isr = new InputStreamReader(in); 
     int length = 0; 
     while ((length = isr.read(cbuf)) != -1) { 
      sb.append(cbuf, 0, length); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      in.close(); 
     } catch (Exception e1) { 
      e1.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

由於物理IO是相當耗費時間,而且由於我的壓縮文件的版本都相當小(約2K從2M的文本),是否有可能仍然執行上述操作,但在已映射到內存的文件上?可能使用java的NIO?謝謝

回答

1

它不會有任何區別,至少不會太大。上次查看時,映射文件的I/O速度大約快20%。實際上你仍然必須做 I/O:映射只是保存一些數據拷貝。我會考慮將BUFFER_SIZE增加到至少32k。 cbuf也應該是這個方法中的一個局部變量,而不是一個成員變量,所以它將是線程安全的。可能值得而不是壓縮文件在一定的大小閾值,比如說10k。

此外,您應該在此關閉isr,而不是in

可能值得嘗試在GZIPInputStream之上放置另一個BufferedInputStream,以及它下面的一個。讓它一次做更多。