如何知道何时停止InputStream缓冲

时间:2012-12-12 09:23:33

标签: java inputstream

我通过串口与设备通信。

我设法获取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");
}

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

2 个答案:

答案 0 :(得分: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");
    }

答案 1 :(得分:1)

来自How to identify end of InputStream in java

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

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

  • 关闭邮件末尾的连接
  • 将消息的长度放在数据本身之前
  • 使用分隔符;一些在正常情况下永远不会发生的值 数据(或总是以某种方式转义)