(de)使用NIO压缩文件

时间:2011-08-24 13:04:43

标签: java io zip nio

在网上的许多例子中,使用编码缓冲区在java中对文件进行(de)压缩。但是,使用NIO,无需选择良好的缓冲区大小。我找到了文件和套接字的示例,但是有一个NIO通道用于压缩输入(例如GZIPInputStream),所以你可以使用transferFrom而不是自己创建byte[]缓冲区吗? / p>

2 个答案:

答案 0 :(得分:3)

您可以使用java.nio.channels.Channels中的静态实用程序方法在通道中包装流,反之亦然。

E.g。创建一个通道,您可以从中读取gzip压缩文件中的未压缩数据:

FileChannel fc = 
    new RandomAccessFile("input.gz", "r").getChannel();

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

答案 1 :(得分:2)

不,专业的ZIP频道尚不存在...... 我认为你可以做到以下几点。使用NIO从任何要缓冲的通道读取。然后检索刚刚从缓冲区读取到字节数组的字节,使用ByteArrayInputStream包装数组并将其传递给ZIPInputStream。