即时压缩(从流中)流

3

我有一个第三方API方法,它将流作为输入参数并处理它(读取它)。我提供的流可能非常巨大(即无法放入内存中)。我想将此流包装到某个压缩流中,在方法读取流时进行实时压缩。

是否有任何库可以实现这一点?压缩不需要超级高效,类似于ZIP的东西就足够了。

示例:

using (var data = File.OpenRead(...))
{
  using (var pack = new PackStream(data))
  {
    3rdPartyApiMethod(pack);
  }
}

void 3rdPartyApiMethod(Stream s)
{
  // process the stream until EOF
  // "while(true) s.Read"
}

因此,理论上的PackStream应该从底层流中尽可能少地读取数据,将其打包并返回给请求者。根据评论更新(完整故事请见下文):
该方法正在按块读取数据,并将每个块上传到服务器。一次一个。只是把它存储在那里。由于我的文件大约比块大100倍,即使是简单的ZIP压缩也能将文件压缩到约1/10,我认为压缩它是一个好主意。

压缩流。 - I4V
@I4V 我也曾这样想过,但问题在于 GZipStream 在压缩模式下将会要求向 data 写入数据,而非从中读取数据。只有在解压模式下才会从 data 中读取数据。 - Marc Gravell
1个回答

1

使用DotNetZip的ZlibStream。zlib被设计用于流式压缩。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接