【问题标题】:Write compressed data to NetworkStream将压缩数据写入 NetworkStream
【发布时间】:2012-02-17 08:39:12
【问题描述】:

我正在编写一个简单的客户端-服务器应用程序,并且查看 MSDN 文档,我发现了一些有趣的流类型...

http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

显然,有压缩流这样的东西!考虑到我们正在处理网络,这自然非常有吸引力。然而,最不幸的是,TcpClient.GetStream() 只返回一个 NetworkStream——不是任何形式的压缩流。

我想知道是否可以连接压缩流以重定向到 NetworkStream,这意味着我可以编写压缩流并且该流会将其压缩输出写入我的 NetworkStream。我还需要知道如何做相反的事情,获取压缩流以从 NetworkStream 中读取。

另外,你推荐我做哪一个 -- 哪个提供最快的压缩,GZip 还是 Deflate?以及两者在压缩上的区别是什么?

【问题讨论】:

    标签: c# networking stream compression


    【解决方案1】:

    Checkout networkComms.net,一个开源网络通信库,其中包含在发送数据时使用多种不同类型压缩的选项。您所要做的就是更改 NetworkComms.DefaultCompressor 属性。您可以选择:

    1. LZMA(慢速,最佳压缩)
    2. GZip(速度快,压缩好)
    3. QuickLZ(最佳速度,基本压缩)

    为了支持这些以及任何其他数量的不同压缩方法networkComms.net 在基础上使用基本的 networkStream 并确保所有内容在到达该点之前都已压缩。

    【讨论】:

      【解决方案2】:

      这些是包装流
      您可以在任何现有流周围创建GzipStream,以将压缩数据读取或写入内部流。

      【讨论】:

        猜你喜欢
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 2013-08-06
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多