繁体   English   中英

C# StreamReader.readLine() 如何区分换行符?

[英]How C# StreamReader.readLine() distincts newline characters?

假设我使用 tcp 客户端和 tcp 服务器并通过 streamwriter/streamreader 传输数据。 客户端向服务器发送“HELLO WORLD ... some text ... \r\n”。

服务器可以通过多种方式读取它: "HELLO WORLD ... some text ... \r\n"; "HELLO" "世界...一些文字... \r\n"; "HELLO WORLD ...一些文字... \r" "\n";

有 3 个换行符 "\r"、\r\n"、\n",具体取决于操作系统。

它怎么知道发送的是“\r”还是“\r\n”?

如果它试图再读一个字节,它可能会永远挂起,因为 read func 被阻塞了。 如果它没有尝试再读取一个字节,它可能会在流中留下“\n”,这将被下一个函数调用读取,从而导致错误。

来自ReadLine的文档

行定义为字符序列后跟换行符 ("\n")、回车符 ("\r") 或回车符后紧跟换行符 ("\r\n")。 返回的字符串不包含终止的回车符或换行符。 如果到达输入流的末尾,则返回值为 null。

因此,ReadLine 将被允许在读取“\n”“\r”后立即返回。 它需要一些额外的代码,以便“\r\n”不会被读取为两个单独的行,但这应该很容易处理。

因此,您不必担心结束行字符,无论平台如何,streamreader 都应该正确处理它。 而且我不会担心从流中读取比可用的更多。 查看源代码表明,这似乎是通过检查缓冲区中是否有可用字符来处理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM