2012-04-03 80 views
1

所以一段時間以來,我一直使用StreamReader/Writer作爲TcpClient的NetworkStream的包裝 - 主要是爲了簡單,並節省時間。Stream [Reader/Writer]的優點/缺點

在連接的兩端使用streamreader/writer工作正常,但我注意到,當使用其中一個輔助類與不使用輔助對象的端點時,奇怪的事情開始發生。無用的字節被添加到流和其他奇怪的東西。

這讓我想到了,也許有一些不需要的開銷使用這些包裝?或者在使用C++或PHP等其他語言開發客戶端時可能會遇到兼容性問題。

使用StreamReader和StreamWriter助手類的含義是什麼?有什麼好處? (沿錯誤處理的行或其他任何東西)

+0

文本閱讀器和編寫者傾向於進行緩衝讀取和寫入。請參閱有關此行爲的文檔。 – leppie 2012-04-03 17:24:13

+0

當你掌握協議規範時,那些「奇怪的東西」將會消失,主要是編碼。 – 2012-04-03 18:22:18

回答

3

StreamReader/Writer讓你輕鬆地存儲/讀取文本數據流/從流。沒有額外的開銷,他們是什麼 - 將值轉換爲正確編碼的文本表示。只要雙方都對編碼達成一致,即使用默認的帶有BOM的UTF-8,那麼從其他語言中消費此文本流應該沒有問題。

「附加前綴的字節」是字節順序標記(BOM),您可以在構建閱讀器時關閉它(僅適用於Unicode UTF-8/7/16編碼)。

根據您的目標,使用二進制通信的原始碼流可能會更好/更快。

0

我假設你使用ReadLine和WriteLine並看到不一致的結果。

首先,StreamReader採用UTF-8字符,這可能不是從另一端發送的內容。您可以在創建StreamReader時設置編碼。其次,StreamReader假定行以\ n,\ r或\ r \ n結尾,這意味着如果另一端發送換行符爲\ n \ r,則會導致奇怪。

三,是的,StreamReader存在一些開銷,因爲它必須緩衝輸入以查找換行符。但是如果沒有這些,直到找到一條新線很困難。

+0

我正在使用Read,ReadBlock和Write – caesay 2012-04-03 18:07:14

+0

StreamReader/Writer沒有固定在UTF8上 – 2012-04-03 18:16:48

+0

@HenkHolterman - 我沒有說這是,我說它可以在構造函數中更改。 – 2012-04-03 18:18:42