Fra*_*ler 7 java zip gzip nio filechannel
我需要在给定FileChannel的情况下读取/解压缩.gz文件.
我已经玩过使用GZIPInputStream提取GZIP档案,但这不会占用FileChannel.我无权访问FileChannel的原始FileInputStream.
如果有人能告诉我一个从FileChannel阅读GZIP 的好方法(或者至少是任何方式),我将非常感激.
改编自Sun Oracle论坛上的问题.
Dan*_*que 19
您可以在FileChannel周围获取包装InputStream:
FileChannel fc = ...
GZIPInputStream gis = new GZIPInputStream(Channels.newInputStream(fc));
Run Code Online (Sandbox Code Playgroud)
渠道在Java SE中.
是的,有一个解决方案.实现GZip非常简单.你需要一个Inflater和CRC32,再加上阅读标题/预告片.不幸的是java.util.zip.Inflater
,只采用byte[]
哪种不是最理想的(直接缓冲区的效率会更高).然而,使用非直接缓冲区和ByteBuffer.array()是一种选择.
内置的java.util.zip.CRC32
速度很慢,在java中重新实现它是迈向性能的一个很好的一步. com.jcraft.jzlib
提供纯Java实现(几乎看起来像纯C),并且可以替换byte [] w/direct Buffer.由于边界检查太多而无法执行如此深的内联,因此与inflater(decomppress)相比,库有点慢.然而,压缩速度更快.
归档时间: |
|
查看次数: |
5820 次 |
最近记录: |