2012-02-22 191 views
2

這是我的代碼: (壓縮文件包含文本文件)如何使用NIO從gzip文本文件逐行讀取文本數據?

ByteBuffer buffer = ByteBuffer.allocateDirect(8192);    
try { 
     ReadableByteChannel gzc = Channels.newChannel(new GZIPInputStream(Channels.newInputStream(Channels.newChannel(new FileInputStream("C:\\temp\\111.gz"))))); 

     gzc.read(buffer);       
} 
+1

值得一提的是,使用普通IO不太可能更簡單或更高效。如果你不得不支持只需要NIO的庫,我只會這樣做。 – 2012-02-22 12:53:38

+0

性能增益如何? – omrid 2012-02-22 13:01:32

+0

效率,我的意思是性能。主要的瓶頸是壓縮/解壓縮,使用額外的層/包裝可能會使其稍微慢一點(雖然相差不大)。使用直接的ByteBuffer可以減少系統周圍副本的數量。 – 2012-02-22 13:03:29

回答

0

性能也將取決於緩衝區的大小。您可能想要將BufferedInputStream()包裝到混合中,並使用大緩衝區(例如!MB)來一次從磁盤中獲取大量塊。