Я хотел бы поделиться своими знаниями, это может быть полезно для тех, кто сталкивается с той же проблемой. Это может сделать ваш день менее болезненным.

аюсь с устройством для управления спутниковой антенной через последовательное соединение.

Открытие соединения с последовательным устройством:

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;

portIdentifier = CommPortIdentifier.getPortIdentifier(device);
serialPort = (SerialPort) portIdentifier.open(name, 
serialPort.setSerialPortParams(baudrate, databits, stopbits, parity);
serialPort.setFlowControlMode(flowMode);

bufferedReader = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
outputStream = serialPort.getOutputStream();

Если устройство становится недоступным, я должен очистить поток перед тем, как отправлять новые команды, как только устройство снова включится. Но этот понятный метод на входном / выходном потоке блокирует, если устройство не работает. Также закрытие потоков или закрытие блоков SerialDevice.

Есть ли способ закрыть / очистить эти потоки или SerialDevice без блокировки?

bufferedRead.close(); // blocks until device is up again
outputStream.close(); // blocks until device is up again
serialPort.close(); // blocks until device is up again