【发布时间】:2011-11-02 19:17:42
【问题描述】:
在许多在线示例中,文件在 java 中使用编码缓冲区进行(解)压缩。然而,对于 NIO,没有必要选择一个好的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的 NIO 通道(例如GZIPInputStream),所以您可以只使用transferFrom 而不是自己创建byte[] 缓冲区?
【问题讨论】:
在许多在线示例中,文件在 java 中使用编码缓冲区进行(解)压缩。然而,对于 NIO,没有必要选择一个好的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的 NIO 通道(例如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)));
【讨论】:
transferFrom 方法来实际复制数据,这就是我要找的..