【问题标题】:(de)compressing files using NIO使用 NIO (de) 压缩文件
【发布时间】:2011-11-02 19:17:42
【问题描述】:

在许多在线示例中,文件在 java 中使用编码缓冲区进行(解)压缩。然而,对于 NIO,没有必要选择一个好的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的 NIO 通道(例如GZIPInputStream),所以您可以只使用transferFrom 而不是自己创建byte[] 缓冲区?

【问题讨论】:

    标签: java io zip nio


    【解决方案1】:

    不,专门的 ZIP 频道还不存在... 我认为您可以执行以下操作。使用 NIO 从您想要缓冲的任何通道中读取。然后将刚刚从缓冲区读取的字节检索到字节数组,使用 ByteArrayInputStream 包装数组并将其传递给 ZIPInputStream。

    【讨论】:

      【解决方案2】:

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

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

      FileChannel fc = 
          new RandomAccessFile("input.gz", "r").getChannel();
      
      ReadableByteChannel gzc = 
          Channels.newChannel(
                  new GZIPInputStream(
                          Channels.newInputStream(fc)));
      

      【讨论】:

      • ReadableByteChannel 没有 transferFrom 方法来实际复制数据,这就是我要找的..
      • 无需讽刺。我编辑了问题以反映我的需要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多