我有一个第三方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,我认为压缩它是一个好主意。
GZipStream
在压缩模式下将会要求向data
写入数据,而非从中读取数据。只有在解压模式下才会从data
中读取数据。 - Marc Gravell