c调流设计



C#中设计打包/转换流代理的最佳方法是什么?

假设,我有一些输入流,我希望做一些类似于boost::iostreams的事情。

因此,例如,我可以将zlib打包代理到流,以便当我访问ZlibWrappedStream(initialStream)的内容时,我从initialStream接收数据,但使用zlib进行打包?

考虑到不同的代理可以一个接一个地应用,并且考虑到多线程打包的可能性,这是如何设计的?

。. NET流已经允许您正在谈论的链接。例如,如果我想将数据压缩并存储到一个文件中,我可以这样写:

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提供更大的压缩窗口。

只要将所有的多线程操作限制在类的内部,多线程打包应该不是问题。如果您希望多个线程能够并发地写入流,则必须创建某种同步机制来防止输入缓冲区中的数据交错。同样,如果您将同步限制在类内部,那么应该不会有问题。同样的事情也适用于多线程解包和读取。

相关内容

  • 没有找到相关文章

最新更新