如何从没有Length的SerialPort.BaseStream读取字节

时间:2013-08-21 19:24:54

标签: c# stream serial-port

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

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

2 个答案:

答案 0 :(得分:2)

你做不到。也就是说,如果您拥有的只是BaseStream,则无法保证已收到所有内容。

如果您收到了所有内容,有两种方法可以知道:

  1. 发送一个长度字作为数据包的前2或4个字节。这表示将跟随多少字节。然后,读者读取该长度字,读取那么多字节,并知道它已完成。
  2. 同意记录分隔符。这对文本很有用。例如,您可能会确定空字节或行尾字符表示数据的结尾。这对于任意二进制数据来说有点困难,但可能。见评论。
  3. 或者,根据您的应用程序,您可以进行某种计时。也就是说,如果你没有收到任何新的X秒(或毫秒?),你会认为你收到了所有东西。如果发件人特别慢,这有一个明显的缺点就是效果不好。

答案 1 :(得分:0)

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