0

我通过串行端口与设备通信。

我设法获取了 InputStream 并读取了设备发送的内容。

但问题是,我根本不知道何时停止阅读并继续执行另一项任务。

这是简化的代码:

inputStream = serialPort.getInputStream();
try
{
    int step = 0;
    while ( (len = inputStream.read(buffer)) > -1 )
    {
        //do something
    }    
    System.out.println("END");
}
catch ( IOException e )
{
    throw new Exception("IO Error");
}

它从未设法到达“END”。即使设备什么也没发送,它也会继续循环。设备停止发送时如何停止循环。

4

2 回答 2

1
 inputStream = serialPort.getInputStream();
 int available = inputStream .available();

 if (available > 0) {
        byte data[] = new byte[available];
        inputStream .read(data);

   }else{
    logger.info("data is not avilable");
    }
于 2012-12-12T09:26:59.953 回答
1

如何在java中识别InputStream的结尾

它正在寻找更多数据,因为没有人告诉它不会有更多数据。网络的另一端可以随时发送更多数据。

目前尚不清楚您是在设计客户端/服务器协议还是只是尝试实现它,但通常有三种常用方法来检测消息的结尾:

  • 在消息末尾关闭连接
  • 将消息的长度放在数据本身之前
  • 使用分隔符;一些在正常数据中永远不会出现的值(或者总是以某种方式被转义)
于 2012-12-12T09:35:38.967 回答