[英]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.