流的优点/缺点[读/写器]

时间:2012-04-03 17:21:36

标签: c# networking networkstream

所以有一段时间我一直在使用StreamReader / Writer作为TcpClient的NetworkStream的包装器 - 主要是为了简化和节省时间。

在连接的两端使用流读取器/编写器时,它工作正常,但我注意到当使用其中一个辅助类而端点不使用辅助对应时,奇怪的事情开始发生。流中添加了无关的字节和其他奇怪的东西。

这让我想到了,使用这些包装器可能有一些不需要的开销吗?或者在使用其他语言(如C ++或PHP)开发客户端时可能存在兼容性问题。

使用StreamReader和StreamWriter助手类有什么含义,有什么好处吗? (沿着错误处理或其他任何方式)

2 个答案:

答案 0 :(得分:3)

StreamReader / Writer让您可以轻松地将文本数据存储到流中/从中读取文本数据。除了它们之外没有额外的开销 - 将值转换为正确编码的文本表示。只要双方都同意编码,就应该没有问题从其他语言中消费这个文本流 - 即一个是带有BOM的默认UTF-8。

“前置外部字节”是字节顺序标记(BOM),您可以在构建阅读器时将其关闭(并且仅用于Unicode UTF-8/7/16编码)。

根据您的目标,使用原始流进行二进制通信可能会更好/更快。

答案 1 :(得分:0)

我假设你正在使用ReadLine和WriteLine并且看到不一致的结果。

首先,StreamReader采用UTF-8字符,这可能不是从另一方发送的字符。您可以在创建StreamReader时设置编码。

其次,StreamReader假设行以\ n,\ r或\ r \ n结尾,这意味着如果另一端发送换行符为\ n \ r \ n,则会导致异常。

第三,是的,StreamReader有一些开销,因为它必须缓冲输入才能查找换行符。但如果没有这个,那么在找到一条新线之前要难得多。