我有一個事件在我接收數據時被觸發。收到的數據是大型壓縮流的一部分。如何使用DeflateStream解壓直播數據?
目前,我維護一個MemoryStream
,並且每當我收到數據時我都會打電話給Write
。但是,爲了解壓縮這些數據,我需要在它周圍包裝一個DeflateStream
。問題是,當您在DeflateStream
上撥打Read
時,它會讀取零字節!
這是因爲DeflateStream.BaseStream
是MemoryStream
我剛寫來的,所以MemoryStream.Position
已經更新,對於閱讀和寫作。
是否有替代品在每個MemoryStream.Write
之後致電MemoryStream.Seek(-bytesJustWritten, SeekOrigin.Current)
?
我需要能夠實時讀取解壓縮的字節,而無需等待流的關閉。
我以爲我可以使用兩個MemoryStream
對象,一個用於緩衝我的輸入,然後一個用於複製然後讀取,但我很快意識到它會出現相同的問題;您無法寫入流,然後在沒有首先查找的情況下從中讀取數據。
我通過創建所謂的'ProducerConsumerStream'解決了這個問題。這是一個自定義對象,具有實現「Stream」接口的固定大小的循環緩衝區。你寫信給一方,從另一方讀。見[建立一個新類型的流](http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=852) –
@JimMischel你應該已經添加了這個答案:) –
如果我' d有東西要添加到文章中,我會讓它成爲答案。但不鼓勵鏈接的答案。 –