From b41d317e9b76b1158a9d21257698e55194bb39f5 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期五, 04 九月 2026 22:52:09 +0800
Subject: [PATCH] 建立电池检测模块骨架与运行时装配

---
 battery-device-simulator/src/main/java/com/battery/device/simulator/ScriptedBtsTcpSimulator.java |   33 +++++++++++++++++++++++++++++++--
 1 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/ruoyi-device/src/main/java/com/ruoyi/device/bts/ScriptedBtsTcpSimulator.java b/battery-device-simulator/src/main/java/com/battery/device/simulator/ScriptedBtsTcpSimulator.java
similarity index 82%
copy from ruoyi-device/src/main/java/com/ruoyi/device/bts/ScriptedBtsTcpSimulator.java
copy to battery-device-simulator/src/main/java/com/battery/device/simulator/ScriptedBtsTcpSimulator.java
index eb80068..2f7a75a 100644
--- a/ruoyi-device/src/main/java/com/ruoyi/device/bts/ScriptedBtsTcpSimulator.java
+++ b/battery-device-simulator/src/main/java/com/battery/device/simulator/ScriptedBtsTcpSimulator.java
@@ -1,4 +1,4 @@
-package com.ruoyi.device.bts;
+package com.battery.device.simulator;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -134,7 +134,36 @@
 
     private String readFrame(InputStream input) throws IOException
     {
-        return new String(BtsFrameReader.read(input, Integer.MAX_VALUE), StandardCharsets.UTF_8);
+        return new String(readFrameBytes(input), StandardCharsets.UTF_8);
+    }
+
+    private byte[] readFrameBytes(InputStream input) throws IOException
+    {
+        java.io.ByteArrayOutputStream bytes = new java.io.ByteArrayOutputStream();
+        byte[] delimiter = FRAME_END;
+        int matched = 0;
+        while (true)
+        {
+            int current = input.read();
+            if (current < 0) throw new java.io.EOFException("BTS frame ended before delimiter");
+            if ((byte) current == delimiter[matched])
+            {
+                matched++;
+                if (matched == delimiter.length) return bytes.toByteArray();
+                continue;
+            }
+            if (matched > 0)
+            {
+                for (int i = 0; i < matched; i++) bytes.write(delimiter[i]);
+                matched = 0;
+                if ((byte) current == delimiter[0])
+                {
+                    matched = 1;
+                    continue;
+                }
+            }
+            bytes.write(current);
+        }
     }
 
     @Override

--
Gitblit v1.7.1