0

我在移动设备上的串行程序有两个问题:

  1. 根据文档,InputStream.available()始终返回 0。不能使用 DataInputStream 因为数据可能是文件而不是字符串。如果我只是在 InputStream 上调用 read(),如果另一侧不存在字节,它将阻止 IO 操作。另外,我不知道输入数据的大小是多少。那么如何查找端口是否有可用数据以及可用数据的大小是多少?
  2. 我正在使用超级终端来测试串口,而手机只响应AT 命令,如 ata 和 atd。所以任何像“hello”这样的字符串都会被忽略,我的应用程序看不到它。这是真的吗?或者我错过了什么?如何使数据对我的应用程序可见?

有什么建议吗?也许是代码片段?

4

1 回答 1

0

您可以将侦听器添加到 SerialPort,只要该端口上有数据可用,该侦听器就会收到通知。在此回调中,in.available()还应该返回可以读取的字节数,但最好只消耗字节直到read返回 -1。

final CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1");

final SerialPort com1 = (SerialPort)portId.open("Test", 1000);
final InputStream in = com1.getInputStream();

com1.notifyOnDataAvailable(true);
com1.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
com1.addEventListener(new SerialPortEventListener() {
    public void serialEvent(SerialPortEvent event) {
        if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                byte[] buffer = new byte[4096];
                int len;
                while (-1 != (len = in.read(buffer))) {
                    // do something with buffer[0..len]
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
});
于 2012-01-31T10:34:17.250 回答