2

问题很简单:网络流的 StreamWriter 中的 WriteLine() 是否总是传递整行?还是有一些限制?例如,它只提供某种尺寸的线。

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

4

3 回答 3

2

是的,ReadLineStreamReader流的另一端总是会读取一个完整的行(或产生OutOfMemoryException),但这是ReadLine网络流的更多属性。在网络级别,对于NetworkStream,它可能已被拆分为多个单独的发送和接收。

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


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

于 2013-03-07T14:56:33.530 回答
1

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

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

更准确地说:您StreamWriter将始终将整个字符串传送到您的 NetworkStream,它可能会或可能不会一次发送所有字符串,具体取决于包括字符串、网络配置等在内的多种因素。另一方面,类似的事情发生了。NetworkStream.Read 将一次读取尽可能多的内容,并将其全部传递给 StreamReader,但如果您使用StreamReader.ReadLine,该方法将在获得完整行之前不会返回任何内容。

于 2013-03-07T14:56:23.997 回答
1

无论如何,它都会写和读它。

例如,就在今天早些时候,我正在BigIntegers使用流写入超过183,000 位数字的数字WriteLine(尽管花了一段时间!)。

于 2013-03-07T14:54:24.650 回答