| | |
| | | // 检查缓冲区容量,动态处理 |
| | | if (!ensureBufferCapacity(rawData.length)) { |
| | | // 缓冲区不足时,清理并重新开始 |
| | | if (debugEnabled) { |
| | | System.out.println("缓冲区不足,清空缓冲区重新开始"); |
| | | } |
| | | bufferPosition = 0; |
| | | } |
| | | |
| | |
| | | int startIndex = findStartMarker(); |
| | | if (startIndex == -1) { |
| | | // 没有找到起始标记,清空无效数据 |
| | | if (debugEnabled) { |
| | | System.out.println("未找到起始标记,清空缓冲区"); |
| | | } |
| | | bufferPosition = 0; |
| | | return; |
| | | } |
| | |
| | | |
| | | // 检查数据长度有效性 |
| | | if (dataLength < 0 || totalPacketLength > BUFFER_SIZE) { |
| | | if (debugEnabled) { |
| | | System.out.println("无效数据长度: " + dataLength + ", 跳过起始字节"); |
| | | } |
| | | // 跳过错误的起始标记,继续查找 |
| | | compactBuffer(startIndex + 1); |
| | | continue; |
| | |
| | | // 提取完整数据包 |
| | | byte[] packet = Arrays.copyOfRange(dataBuffer, startIndex, startIndex + totalPacketLength); |
| | | |
| | | if (debugEnabled) { |
| | | System.out.println("解析到完整数据包: " + bytesToHex(packet)); |
| | | } |
| | | |
| | | // 添加到返回列表 |
| | | completePackets.add(packet); |
| | | |
| | |
| | | * 打印原始数据(调试用) |
| | | */ |
| | | private void printRawData(String prefix, byte[] data, int maxPrintLength) { |
| | | if (data == null || data.length == 0) { |
| | | System.out.println(prefix + ": 空数据"); |
| | | return; |
| | | } |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.append(prefix).append(" [长度: ").append(data.length).append("]: "); |
| | | |
| | | int printLength = Math.min(data.length, maxPrintLength); |
| | | for (int i = 0; i < printLength; i++) { |
| | | sb.append(String.format("%02X ", data[i])); |
| | | } |
| | | |
| | | if (data.length > maxPrintLength) { |
| | | sb.append("... [截断,总长度: ").append(data.length).append("]"); |
| | | } |
| | | |
| | | System.out.println(sb.toString()); |
| | | // 调试输出已移除 |
| | | } |
| | | |
| | | /** |