2012-02-22 99 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)来一次从磁盘中获取大量块。