我收到数据时会触发一个事件。接收到的数据是大型压缩流的一部分。
目前,我会维护aMemoryStream
并在Write
收到数据时立即对其进行调用。但是,要解压缩此数据,我需要在其DeflateStream
周围包装一个。问题在于,当您调用Read
时DeflateStream
,它将读取零字节!
这是因为DeflateStream.BaseStream
是MemoryStream
我刚写来的,所以MemoryStream.Position
已经更新,对于阅读和写作。
除了MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)
每打完一次电话,还有其他选择MemoryStream.Write
吗?
我需要能够实时读取解压缩的字节,而不必等待流的关闭。
我以为我可以只使用两个MemoryStream
对象,一个用于缓冲输入,然后一个用于复制然后读取,但是我很快意识到这会带来同样的问题;您不能先写入流,然后再读取流。
我通过使用一个MemoryStream
并MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)
在每次调用后MemoryStream.Write
调用来解决了这一问题。
此操作重置了流的位置,以允许读取刚解压缩的数据,并随后将其覆盖,同时保留的状态DeflateStream
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句