使用NIO压缩/解压文件

3

在许多在线示例中,使用编码缓冲区在Java中压缩/解压文件。然而,使用NIO,无需选择好的缓冲区大小。我找到了文件和套接字的示例,但是否有用于压缩输入(例如GZIPInputStream)的NIO通道,因此您可以只使用transferFrom而不是自己创建byte[]缓冲区?

2个回答

3
你可以使用java.nio.channels.Channels中的静态实用方法将流包装成通道,反之亦然。
例如,创建一个通道,从中您可以读取gzip压缩文件的未压缩数据:
FileChannel fc = 
    new RandomAccessFile("input.gz", "r").getChannel();

ReadableByteChannel gzc = 
    Channels.newChannel(
            new GZIPInputStream(
                    Channels.newInputStream(fc)));

ReadableByteChannel 没有 transferFrom 方法来实际复制数据,这正是我正在寻找的.. - tb189
不需要讽刺。我编辑了问题以反映我所需的内容。 - tb189

3

没有专门的ZIP通道存在...

我认为你可以这样做:使用NIO从任何你想要的通道读取到缓冲区中,然后将刚刚读取的字节从缓冲区中检索出来,将这些字节包装到ByteArrayInputStream中并将其传递给ZIPInputStream。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接