|  |  | 
 |  |  |     private ScheduledExecutorService scheduledExecutorService; | 
 |  |  |     private ExecutorService singleThreadExecutor; | 
 |  |  |     private ScheduledFuture scheduledFuture; | 
 |  |  |     private SerialPortReadObserver serialPortReadObserver; | 
 |  |  |     private boolean isOk = false; | 
 |  |  |  | 
 |  |  |     private final Object writeLock = new Object(); | 
 |  |  |  | 
 |  |  |     public SerialPortModel(String serialPortPath, int baudrate, int dataBits, int stopBits, int parity) { | 
 |  |  |     public SerialPortModel(String serialPortPath, int baudrate, int dataBits, int stopBits, int parity,SerialPortReadObserver portReadObserver) { | 
 |  |  |         this.serialPortPath = serialPortPath; | 
 |  |  |         this.baudrate = baudrate; | 
 |  |  |         this.dataBits = dataBits; | 
 |  |  |         this.stopBits = stopBits; | 
 |  |  |         this.parity = parity; | 
 |  |  |         this.serialPortReadObserver = portReadObserver; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public boolean open() { | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void startRead(SerialPortReadObserver serialPortReadObserver) { | 
 |  |  |     public void startRead() { | 
 |  |  |         scheduledFuture = scheduledExecutorService.scheduleWithFixedDelay(() -> { | 
 |  |  |             InputStream inputStream = serialPort.getInputStream(); | 
 |  |  |             byte[] bytes = new byte[2048]; | 
 |  |  | 
 |  |  |             for(int i=0;i<length;i++){ | 
 |  |  |                 bytes2[i] = bytes[i]; | 
 |  |  |             } | 
 |  |  |             serialPortReadObserver.onResultBytes(bytes2); | 
 |  |  |         }, 0, 50, TimeUnit.MILLISECONDS); | 
 |  |  |             if(serialPortReadObserver!=null) { | 
 |  |  |                 serialPortReadObserver.onResultBytes(bytes2); | 
 |  |  |             } | 
 |  |  |         }, 0, 100, TimeUnit.MILLISECONDS); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void stopRead() { | 
 |  |  |         scheduledFuture.cancel(true); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public void write(byte[] bytes,SerialPortReadObserver serialPortReadObserver) { | 
 |  |  |     public void write(byte[] bytes) { | 
 |  |  |         singleThreadExecutor.execute(() -> { | 
 |  |  |             synchronized (writeLock) { | 
 |  |  |                 try { | 
 |  |  |                     serialPort.getOutputStream().write(bytes); | 
 |  |  |                     serialPortReadObserver.onResult(null); | 
 |  |  |                     if(serialPortReadObserver!=null) { | 
 |  |  |                         serialPortReadObserver.onResult(null); | 
 |  |  |                     } | 
 |  |  |                 } catch (IOException e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                     serialPortReadObserver.onResult(e.getMessage()); | 
 |  |  |                     if(serialPortReadObserver!=null) { | 
 |  |  |                         serialPortReadObserver.onResult(e.getMessage()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }); |