我想使用流类向串行端口读/写数据。我使用BaseStream来获取流(下面的链接),但Length属性不起作用。有人知道我如何在不知道有多少字节的情况下读取完整的缓冲区吗?
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.basestream.aspx
你不能。也就是说,如果你只有BaseStream
,你就不能保证你已经收到了所有东西。
有两种方法可以知道你是否收到了所有东西:
- 发送一个长度字作为数据包的前2或4个字节。这说明后面将有多少字节。然后,你的读者会读取那个长度的单词,读取那么多字节,并知道它已经完成了
- 就记录分隔符达成一致。这对文本非常有效。例如,您可能决定一个空字节或行尾字符表示数据的结束。这对于任意二进制数据来说有些困难,但也是可能的。请参阅评论
或者,根据你的申请,你可以做一些时间安排。也就是说,如果你在X秒(或毫秒?)内没有收到任何新的东西,你就认为你已经收到了所有东西。这有一个明显的缺点,即如果发件人速度特别慢,则无法正常工作。
也许您可以尝试SerialPort.BytesToRead属性。