2013-03-07 49 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字符串包含在内部,换行符序列,那么你将只接收直到第一换行序列串起来的部分)

相关问题