使用 NIO 压缩(解压缩)文件

发布于 2024-12-01 13:22:39 字数 174 浏览 1 评论 0原文

在许多在线示例中,文件在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

む无字情书 2024-12-08 13:22:39

不,专门的 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.

对你的占有欲 2024-12-08 13:22:39

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

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

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

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

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:

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

ReadableByteChannel gzc = 
    Channels.newChannel(
            new GZIPInputStream(
                    Channels.newInputStream(fc)));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文