如何使用DeflateStream解压缩实时流数据?

时间:2014-03-26 03:10:27

标签: c# .net

我收到数据时会触发一个事件。收到的数据是一个大型压缩流的一部分。

目前,每当我收到数据时,我都会保留MemoryStream并在其上调用Write。但是,要解压缩此数据,我需要在其周围包裹DeflateStream。问题是当你在Read上调用DeflateStream时,它会读取零字节!

这是因为DeflateStream.BaseStream是我刚写过的MemoryStream,所以MemoryStream.Position已更新,因为阅读

是否可以在每个MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)之后调用MemoryStream.Write

我需要能够实时读取解压缩的字节,而无需等待流的关闭。

我以为我可以使用两个MemoryStream个对象,一个用于缓冲我的输入,然后一个用于复制然后读取,但我很快意识到它会出现同样的问题;如果没有先寻求,就不能写入流,然后从中读取。

1 个答案:

答案 0 :(得分:0)

我通过使用一个MemoryStream并在每次调用MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)后调用MemoryStream.Write来解决此问题。

这会重置流的位置,以允许刚刚解压缩的数据被读取并稍后被覆盖,同时保留DeflateStream的状态。