2012-01-24 80 views
1

我寫一個簡單的客戶端 - 服務器應用程序,並期待在MSDN文檔,我遇到了一些有趣的數據流類型...寫壓縮數據的NetworkStream

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?兩者之間的壓縮有什麼區別?

回答

5

這些是包裝流
您可以在任何現有流的周圍創建GzipStream以將壓縮數據讀取或寫入內部流。

0

結帳networkComms.net,這是一個開源網絡通信庫,它包括在發送數據時使用多種不同類型的壓縮的選項。您只需更改NetworkComms.DefaultCompressor屬性即可。您可以選擇:

  1. LZMA(慢速,最佳壓縮)
  2. 的GZip(良好的速度,良好壓縮)
  3. QuickLZ(最佳的速度,基本的壓縮)

爲了支持這些加上任何進一步數量的不同壓縮方法networkComms.net在基礎上使用了一個基本的networkStream,並且確保在到達該點之前所有內容都被壓縮了。