我有一些使用JavaComm API的代码。它实现了SerialPortEventListener,并且字符的接收是异步发生的。除收到约17个字符后通知我的serialEvent回调外,此方法工作正常,对于我的数据包解析,我需要在接收到
谢谢,
弗雷德。

最佳答案

当流中有可用数据时,您所获得的只是一个流和一个SerialPortEvent.DATA_AVAILABLE。您可以做的是添加一个间接级别,并创建自己的侦听器,当通过6个字符并仅输入6个字符的字节数组时将调用该侦听器。我在下面添加了插入代码的位置。具体实施取决于您。

  public void serialEvent(SerialPortEvent event) {
    switch (event.getEventType()) {
    case SerialPortEvent.BI:
    case SerialPortEvent.OE:
    case SerialPortEvent.FE:
    case SerialPortEvent.PE:
    case SerialPortEvent.CD:
    case SerialPortEvent.CTS:
    case SerialPortEvent.DSR:
    case SerialPortEvent.RI:
    case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
      break;
    case SerialPortEvent.DATA_AVAILABLE:
      byte[] readBuffer = new byte[20];

      try {
        while (inputStream.available() > 0) {
          int numBytes = inputStream.read(readBuffer);
        }
        // partition readBuffer into chunks of 6 bytes
        ...
        registeredListener.dataReceived(sixByteByteArray);
      } catch (IOException e) {
      }
      break;
    }
  }

08-25 19:30