如何从SerialPort.BaseStream读取不带长度的字节

本文关键字:字节 读取 SerialPort BaseStream | 更新日期: 2023-09-27 18:28:27

我想使用流类向串行端口读/写数据。我使用BaseStream来获取流(下面的链接),但Length属性不起作用。有人知道我如何在不知道有多少字节的情况下读取完整的缓冲区吗?

http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.basestream.aspx

如何从SerialPort.BaseStream读取不带长度的字节

你不能。也就是说,如果你只有BaseStream,你就不能保证你已经收到了所有东西。

有两种方法可以知道你是否收到了所有东西:

  1. 发送一个长度字作为数据包的前2或4个字节。这说明后面将有多少字节。然后,你的读者会读取那个长度的单词,读取那么多字节,并知道它已经完成了
  2. 就记录分隔符达成一致。这对文本非常有效。例如,您可能决定一个空字节或行尾字符表示数据的结束。这对于任意二进制数据来说有些困难,但也是可能的。请参阅评论

或者,根据你的申请,你可以做一些时间安排。也就是说,如果你在X秒(或毫秒?)内没有收到任何新的东西,你就认为你已经收到了所有东西。这有一个明显的缺点,即如果发件人速度特别慢,则无法正常工作。

也许您可以尝试SerialPort.BytesToRead属性。