java使用rxtx接收数据有时一次接收不完

qq_35597957 2019-05-05 03:39:35
我先用串口调试助手往串口发送了信息,信息是8个11

我的程序监听串口并把接收到数据打印出来

@Override
public void serialEvent(SerialPortEvent event)
{
try
{
byte[] readBuffter = new byte[1024];
InputStream vInputStream = port.getInputStream();
int len = 0;
while ((len = vInputStream.read(readBuffter)) > 0)
{
byte[] newByte = new byte[len];
System.arraycopy(readBuffter, 0, newByte, 0, len);
// 字节转16进制字符串
String str = Util.bytesToHexString(newByte);
System.out.println(str);
}
}
catch (IOException pE)
{
pE.printStackTrace();
}

}

我发了两次数据,第一次发送的数据一次就接收完了,第二次发送的数据分了3次接收,这个是为什么
...全文
550 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
p_animal 2019-06-12
  • 打赏
  • 举报
回复
今年年初我也遇到了这个问题,是波特率的问题,串口给你发送的数据是以一定的波特率发送的,每次发送的数据是完整的,但是rxtx接收数据是一个监听器,所以我觉得有可能是数据还没有完全发送成功的时候,已经触发了这个监听器,所以就出现了一次没有接收到你发送的完整数据的情况,,我是这样处理的,给需要发送的数据前后增加两个开始和结束的标识符。然后在接收端接收完整的数据,然后再为所欲为。。。
无限放飞 2019-06-12
  • 打赏
  • 举报
回复
Thread.sleep(seconds);forward to serialEvent method
weixin_40290083 2019-06-12
  • 打赏
  • 举报
回复
在读到传感器数据的时候,经常会遇到这样的问题,特别是传感器的数据量比较大时,每一次读到的数据都是不完整的,解决的方法时开两个线程,一个线程读取数据,另一个线程处理数据,读取到的数据都是byte[] buffer,但最终我们通常都会转换成字符串处理。那么在读取线程中可以设置StringBuffer对象,它不断将byte[] buffer转换为字符串并添加取StringBuffer的尾部,数据处理线程对StringBuffer从头部进行处理。这样数据就是连续的了,当然会有延迟。这个处理过程有点像水管,一头不断的注水,一头不断的流水。 只所有使用StringBuffer,因为StringBuffer对象是线程安全的

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧