我正在编写一个简单的客户端-服务器应用程序,在查看MSDN文档时,我发现了一些有趣的流类型。。。
http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspxhttp://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
显然,有一个压缩的流!当然,考虑到我们正在处理网络问题,这是非常有吸引力的。然而,最不幸的是,TcpClient.GetStream()只返回NetworkStream,而不是任何形式的压缩流。
我想知道是否可以连接一个压缩流重定向到NetworkStream,这意味着我可以编写压缩流,该流将其压缩输出写入我的NetworkStream。我还需要知道如何做相反的事情,从NetworkStream中读取压缩流。
另一方面,你建议我做哪一个——哪一个提供最快的压缩,GZip还是Deflate?两者在压缩方面的区别是什么?
这些是包装流
您可以围绕任何现有流创建GzipStream
,以将压缩数据读取或写入内部流。
Checkout networkComms.net,一个开源网络通信库,其中包括在发送数据时使用多种不同类型压缩的选项。您所要做的就是更改NetworkComms.DefaultCompressor属性。您可以选择:
- 无
- LZMA(低速,最佳压缩)
- GZip(良好的速度,良好的压缩)
- QuickLZ(最佳速度,基本压缩)
为了支持这些以及任何其他不同的压缩方法,networkComms.net在基础上使用一个基本的networkStream,并确保在到达该点之前所有内容都已压缩。