826220679@qq.com
5 小时以前 cbfd1df513c473dd5550d78740c92fc1677b6e9b
src/chuankou/SerialPortService.java
@@ -4,7 +4,7 @@
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.function.Consumer;
// import java.util.function.Consumer;
import com.fazecast.jSerialComm.SerialPort;
@@ -18,12 +18,12 @@
   private volatile boolean capturing = false;
   private volatile boolean paused = true;
   private Thread readerThread;
   private Consumer<byte[]> responseConsumer;
   private DataListener<byte[]> responseConsumer;
   // 优化:重用缓冲区,减少内存分配
   private byte[] readBuffer = new byte[200];
   private ByteArrayOutputStream buffer = new ByteArrayOutputStream(1024);
   private Consumer<byte[]> dataReceivedCallback;
   private DataListener<byte[]> dataReceivedCallback;
   // 新增:数据条数计数器
@@ -97,7 +97,7 @@
      if (dataReceivedCallback != null) {
         startCapture(dataReceivedCallback);
      } else {
         System.err.println("No data received callback set. Please call startCapture(Consumer<byte[]> onReceived) first.");
         System.err.println("No data received callback set. Please call startCapture(DataListener<byte[]> onReceived) first.");
      }
   }
@@ -115,7 +115,7 @@
      return port.openPort();
   }
   public void setResponseConsumer(Consumer<byte[]> consumer) {
   public void setResponseConsumer(DataListener<byte[]> consumer) {
      this.responseConsumer = consumer;
   }
@@ -133,13 +133,15 @@
   /**
    * 启动数据接收线程
    */
   public void startCapture(Consumer<byte[]> onReceived) {
   public void startCapture(DataListener<byte[]> onReceived) {
       this.dataReceivedCallback = onReceived;
       if (capturing || port == null || !port.isOpen()) return;
       capturing = true;
       paused = false;
       readerThread = new Thread(() -> {
       readerThread = new Thread(new Runnable() {
           @Override
           public void run() {
           buffer.reset();
           long lastReceivedTime = 0;
@@ -189,7 +191,7 @@
                   responseConsumer.accept(data);
               }
           }
       });
       } });
       readerThread.setDaemon(true);
       readerThread.start();
   }