代码之家  ›  专栏  ›  技术社区  ›  fred basset

Java串行通信:使用异步时设置接收阈值的方法。阅读通知

  •  0
  • fred basset  · 技术社区  · 14 年前

    我有一些使用JavaCommAPI的代码。它实现了SerialPortEventListener,字符的接收是异步的。这很好用,除了serialEvent回调在收到大约17个字符后得到通知,对于我的数据包解析,我需要在<=共收到6个字符。有没有办法配置串行API来调用异步。收到指定数量的字符时发出通知?

    非常感谢。 弗雷德。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Romain Hippeau    14 年前

    你得到的只是一条小溪和一个喷口。数据流中有数据时,数据可用。你可以做的是添加一个间接寻址级别,并创建自己的侦听器,当6个字符经过时调用它,然后简单地用这6个字符传入字节数组。我在下面添加了te代码。具体实施取决于你。

      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;
        }
      }