簡體   English   中英

C Sharp中的流設計

[英]Stream design in c sharp

C#設計打包/轉換流代理的最佳方法是什么?

假設我有一些輸入流,並且希望做一些類似的事情來boost::iostreams功能。

因此,例如,我可以zlib打包流的代理,以便當我訪問ZlibWrappedStream(initialStream)的內容時,我從initialStream接收數據,但使用zlib打包?

考慮到可以同時應用不同的代理並且還考慮了多線程打包的可能性,該如何設計

.NET流已經允許您正在談論的鏈接。 例如,如果我想gzip數據並將其存儲到文件中,則可以編寫以下內容:

using (var fs = File.OpenWrite(outputFilename))
{
    using (var gz = new GZipStream(fs, CompressionMode.Compress))
    {
        // now, write to the GZip stream . . .
        gz.Write(buffer, 0, buffer, length);
    }
}

您可以將該鏈任意延長。 例如,我經常將BufferedStream放在GZipStream前面,以便為gzip提供更大的壓縮窗口。

只要將所有多線程操作都限制在類的內部,多線程打包就不成問題。 如果希望多個線程能夠同時寫入流,則必須創建某種同步機制來防止在輸入緩沖區中交織數據。 同樣,如果將同步限制在類內部,那么應該沒有問題。 相同的事情適用於多線程解包和讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM