Java (de)使用NIO压缩文件
在许多联机示例中,文件是使用编码缓冲区在java中进行(反)压缩的。但是,对于NIO,不需要选择好的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的NIO通道(例如,Java (de)使用NIO压缩文件,java,io,zip,nio,Java,Io,Zip,Nio,在许多联机示例中,文件是使用编码缓冲区在java中进行(反)压缩的。但是,对于NIO,不需要选择好的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的NIO通道(例如,GZIPInputStream),因此您可以使用transferFrom,而不是自己创建byte[]缓冲区?不,还没有专门的ZIP通道。。。 我认为你可以做到以下几点。使用NIO读取要缓冲的任何通道。然后检索刚刚从缓冲区读取到字节数组的字节,使用ByteArrayInputStream包装数组并将其传递给ZIPInp
GZIPInputStream
),因此您可以使用transferFrom
,而不是自己创建byte[]
缓冲区?不,还没有专门的ZIP通道。。。
我认为你可以做到以下几点。使用NIO读取要缓冲的任何通道。然后检索刚刚从缓冲区读取到字节数组的字节,使用ByteArrayInputStream包装数组并将其传递给ZIPInputStream 您可以使用java.nio.channels.channels中的静态实用程序方法在通道中包装流,反之亦然 例如,要创建一个通道,从中可以从gzip压缩文件中读取未压缩的数据:
FileChannel fc =
new RandomAccessFile("input.gz", "r").getChannel();
ReadableByteChannel gzc =
Channels.newChannel(
new GZIPInputStream(
Channels.newInputStream(fc)));
ReadableByteChannel没有一个
transferFrom
方法来实际复制数据,这就是我要找的……不必讽刺。我编辑了这个问题以反映我的需要。