将压缩数据写入NetworkStream

时间:2012-01-24 01:40:05

标签: c# networking stream compression

我正在编写一个简单的客户端 - 服务器应用程序,并查看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?两者之间的压缩有什么不同?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

  1. LZMA(慢速,最佳压缩)
  2. GZip(良好的速度,良好的压缩)
  3. QuickLZ(最佳速度,基本压缩)
  4. 为了支持这些以及任何更多数量的不同压缩方法networkComms.net在基础上使用基本的networkStream,并确保在到达该点之前已经压缩了所有内容。