2013-03-07 39 views
2

問題很簡單:網絡流的StreamWriter中的WriteLine()總是傳遞整行嗎?或者有一些限制?例如它只提供一些尺寸的線。我的意思是,如果我調用WriteLine(一行上有一些非常長的字符串(例如10000000個字符)),StreamReader的ReadLine()是否會像我發送它一樣接收它?或者它只會收到一些部分?在網絡流的StreamWriter中做WriteLine()總是傳遞全行嗎?

+0

在一個字符串,它很長時間,也許像RAM,劃痕空間,可尋址空間等物理問題可能會發揮作用......但我相信只要你不這樣做。關閉,.Flush或添加一行終止符,然後將它保存爲一個連續的行。 – 2013-03-07 14:57:03

回答

1

它會寫和讀它所有,無論。

例如,只有今天早些時候我與BigIntegers工作和使用WriteLine用寫碼流數超過183000位(雖然,過了好一會兒!)。

1

WriteLine可能會將您的字符串分成多個數據包,但只要您在另一端使用ReadLine,則無需關心。

ReadLine將始終讀取整行,無論它是否包含多個數據包,只要連接不失敗(並且存儲器足夠多等)。

更確切地說:您的StreamWriter將始終將整個字符串傳送到您的NetworkStream,根據多種因素(包括字符串,網絡配置等等),它可能一次也可能不會一次全部發送。另一方面,類似的事情發生。 NetworkStream.Read將一次讀取儘可能多的數據,並將其全部傳遞到StreamReader,但如果您使用的是StreamReader.ReadLine,那麼該方法在返回完整行之前不會返回任何內容。

2
StreamReader在流總是讀一個完整的線(或生產 OutOfMemoryException)的另一端

是,ReadLine,但是這是ReadLine屬性超過了網絡流。在網絡層面,並且對於NetworkStream,其可能已被拆分爲多個單獨的發送和接收。

ReadLine直到看到換行符序列纔會返回。


(警告 - 如果你傳遞給WriteLine字符串包含在內部,換行符序列,那麼你將只接收直到第一換行序列串起來的部分)