我如何用DeflateStream解压直播流数据
本文关键字:直播 数据 何用 DeflateStream | 更新日期: 2023-09-27 17:53:34
我有一个接收数据时触发的事件。接收到的数据是一个大压缩流的一个片段。
目前,我维护一个MemoryStream
,每当我接收到数据时就调用Write
。然而,为了解压缩这个数据,我需要在它周围包裹一个DeflateStream
。问题是,当您在DeflateStream
上调用Read
时,它读取零字节!
这是因为DeflateStream.BaseStream
是我刚刚写入的MemoryStream
,所以MemoryStream.Position
已经更新,用于读取和写入。
是否可以在每个MemoryStream.Write
之后调用MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)
?
我需要能够在不等待流关闭的情况下实时读取解压缩的字节。
我以为我可以只使用两个MemoryStream
对象,一个缓冲我的输入,然后一个复制到,然后从读取,但我很快意识到它会提出同样的问题;
我通过使用一个MemoryStream
并在每次调用MemoryStream.Write
后调用MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)
来解决这个问题。
这将重置流的位置,以允许刚刚解压缩的数据被读取和稍后覆盖,同时保留DeflateStream
的状态。