使用 NIO 压缩(解压缩)文件
在许多在线示例中,文件在 java 中使用编码缓冲区进行(解)压缩。然而,使用 NIO 则无需选择合适的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的 NIO 通道(例如 GZIPInputStream ),因此您可以只使用 TransferFrom 而不是创建 byte[]
自己缓冲?
In the many examples online, files are (de)compressed in java using a coded buffer. With NIO, however, there is no need to choose a good buffer size. I found examples for files and sockets, but is there an NIO channel for compressed input (e.g. GZIPInputStream
), so you can just use transferFrom
in stead of creating the byte[]
buffer yourself?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,专门的 ZIP 频道还不存在......
我认为你可以做到以下几点。使用NIO从任何你想要Buffer的通道中读取数据。然后检索刚刚从缓冲区读取的字节到字节数组,使用 ByteArrayInputStream 包装该数组并将其传递给 ZIPInputStream。
No, specialized ZIP channel does not exist yet...
I think that you can do the following. Use NIO to read from any channel you want to Buffer. Then retrieve bytes you have just read from buffer to byte array, wrap the array using ByteArrayInputStream and pass it to ZIPInputStream.
您可以使用 java.nio.channels.Channels 中的静态实用方法将流包装在通道中,反之亦然。
例如,创建一个通道,您可以从中读取 gzip 压缩文件中未压缩的数据:
You can use the static utility methods in java.nio.channels.Channels to wrap streams in channels and vice versa.
E.g. to create a channel, from which you can read the uncompressed data from a gzip compressed file: