我收到数据时会触发一个事件。收到的数据是一个大型压缩流的一部分。
目前,每当我收到数据时,我都会保留MemoryStream
并在其上调用Write
。但是,要解压缩此数据,我需要在其周围包裹DeflateStream
。问题是当你在Read
上调用DeflateStream
时,它会读取零字节!
这是因为DeflateStream.BaseStream
是我刚写过的MemoryStream
,所以MemoryStream.Position
已更新,因为阅读和。
是否可以在每个MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)
之后调用MemoryStream.Write
?
我需要能够实时读取解压缩的字节,而无需等待流的关闭。
我以为我可以使用两个MemoryStream
个对象,一个用于缓冲我的输入,然后一个用于复制然后读取,但我很快意识到它会出现同样的问题;如果没有先寻求,就不能写入流,然后从中读取。
答案 0 :(得分:0)
我通过使用一个MemoryStream
并在每次调用MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)
后调用MemoryStream.Write
来解决此问题。
这会重置流的位置,以允许刚刚解压缩的数据被读取并稍后被覆盖,同时保留DeflateStream
的状态。