在网络流的StreamWriter中WriteLine()总是提供整行吗?

时间:2013-03-07 14:52:11

标签: c# networkstream

问题很简单:网络流的StreamWriter中的WriteLine()总是提供整行吗?还是有一些限制?例如,它只提供一些大小的线条。

我的观点是,如果我调用WriteLine(一行中有一些非常长的字符串(例如10000000个字符)),StreamReader的ReadLine()会像我发送它一样接收它吗?或者它只会收到一部分?

3 个答案:

答案 0 :(得分:2)

是的,流的另一端的ReadLine上的StreamReader将始终读取完整的一行(或生成OutOfMemoryException),但这是ReadLine的属性不仅仅是网络流。在网络级别,对于NetworkStream可能已被拆分为多个单独的发送和接收。

ReadLine在看到换行符序列之前不会返回。


(警告 - 如果传递给WriteLine的字符串在内部包含换行序列,那么在第一个换行序列之前,你只会收到该部分字符串)

答案 1 :(得分:1)

无论如何,它都会写 ALL

例如,仅在今天早些时候,我正在使用BigIntegers并使用WriteLine使用超过 183,000位数的数字流编写(虽然需要一段时间!)

答案 2 :(得分:1)

WriteLine可能会将您的字符串拆分为多个数据包,但只要您在另一端使用ReadLine,就无需关心。

ReadLine将始终读取整行,无论它是否包含多个数据包,提供连接不会失败(并且内存足够等)。

更准确一点:您的StreamWriter将始终将整个字符串传递给您的NetworkStream,这可能会也可能不会一次性发送,具体取决于许多因素,包括字符串,网络配置等另一方面,类似的事情发生了。 NetworkStream.Read将一次读取多少内容,将其全部传递到StreamReader上,但如果您使用StreamReader.ReadLine,则该方法在完成一行之前不会返回任何内容。