【发布时间】:2016-03-20 08:11:52
【问题描述】:
我正在使用围绕TcpClient 构建的网络协议,使用BinaryReader 从底层NetworkStream 读取字节(相反,使用BinaryWriter 进行写入)。
协议以 UTF-8 编码传输字符串,并调用reader.ReadString() 从流中读取它们(使用writer.Write(someStr) 进行写入)。
是否有一种简单的方法可以确定从 NetworkStream 读取(或写入)的字节数,而无需跳过循环来计算传输字符串的实际字节长度?
请注意,BinaryWriter.Write() 在字符串的实际字节之前写入一个 7 位编码的整数,这使得任何手动计算都变得更加复杂。
还要注意NetworkStream 不支持Position 属性,因为它抱怨不能Seek。
另外,为了不影响整个系统的性能,我想避免在读/写过程中引入必须复制/扫描数据的中介。
是否有一种简单的高级方法来计算通过网络接口的字节数,而无需手动考虑字符串的编码和长度?
【问题讨论】:
-
你想达到什么目的?您可以在网络流和计算字节数的阅读器之间插入自定义流。
-
@usr 我只需要知道读取/写入的总字节数 - 用于报告目的。底层协议栈中的某些东西必须知道发送/接收的字节数...我想以最少的麻烦获得该信息。
标签: c# network-programming tcpclient networkstream binaryreader