feat:优化查找帧函数逻辑
This commit is contained in:
parent
9972b5ddeb
commit
1548934d34
@ -189,40 +189,65 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle
|
||||
}
|
||||
|
||||
Future<List<Uint8List>> _processCompletePayload(Uint8List payload) async {
|
||||
// 存储找到的所有完整帧
|
||||
List<Uint8List> frames = [];
|
||||
int startIdx = -1;
|
||||
final length = payload.length - 1;
|
||||
|
||||
// 手动遍历 payload
|
||||
int i = 0;
|
||||
while (i < payload.length - 1) {
|
||||
// 寻找起始标志 0xFFD8
|
||||
if (payload[i] == 0xFF && payload[i + 1] == 0xD8) {
|
||||
int startIdx = i;
|
||||
i += 2; // 跳过起始标志
|
||||
for (int i = 0; i < length; i++) {
|
||||
final currentByte = payload[i];
|
||||
final nextByte = payload[i + 1];
|
||||
|
||||
// 寻找结束标志 0xFFD9
|
||||
while (i < payload.length - 1) {
|
||||
if (payload[i] == 0xFF && payload[i + 1] == 0xD9) {
|
||||
// 找到结束标志 0xFFD9
|
||||
int endIdx = i + 2;
|
||||
// 使用 Uint8List.view 创建视图,避免内存分配
|
||||
frames.add(
|
||||
Uint8List.view(payload.buffer, startIdx, endIdx - startIdx));
|
||||
i = endIdx; // 继续寻找下一个帧
|
||||
break;
|
||||
} else {
|
||||
i += 1; // 继续寻找结束标志
|
||||
}
|
||||
if (currentByte == 0xFF) {
|
||||
if (nextByte == 0xD8) {
|
||||
startIdx = i;
|
||||
i++; // Skip the next byte
|
||||
} else if (nextByte == 0xD9 && startIdx != -1) {
|
||||
frames
|
||||
.add(Uint8List.view(payload.buffer, startIdx, i + 2 - startIdx));
|
||||
startIdx = -1;
|
||||
i++; // Skip the next byte
|
||||
}
|
||||
} else {
|
||||
i += 1; // 继续寻找起始标志
|
||||
}
|
||||
}
|
||||
|
||||
// 返回找到的所有完整帧
|
||||
return frames;
|
||||
}
|
||||
|
||||
// Future<List<Uint8List>> _processCompletePayload(Uint8List payload) async {
|
||||
// // 存储找到的所有完整帧
|
||||
// List<Uint8List> frames = [];
|
||||
//
|
||||
// // 手动遍历 payload
|
||||
// int i = 0;
|
||||
// while (i < payload.length - 1) {
|
||||
// // 寻找起始标志 0xFFD8
|
||||
// if (payload[i] == 0xFF && payload[i + 1] == 0xD8) {
|
||||
// int startIdx = i;
|
||||
// i += 2; // 跳过起始标志
|
||||
//
|
||||
// // 寻找结束标志 0xFFD9
|
||||
// while (i < payload.length - 1) {
|
||||
// if (payload[i] == 0xFF && payload[i + 1] == 0xD9) {
|
||||
// // 找到结束标志 0xFFD9
|
||||
// int endIdx = i + 2;
|
||||
// // 使用 Uint8List.view 创建视图,避免内存分配
|
||||
// frames.add(
|
||||
// Uint8List.view(payload.buffer, startIdx, endIdx - startIdx));
|
||||
// i = endIdx; // 继续寻找下一个帧
|
||||
// break;
|
||||
// } else {
|
||||
// i += 1; // 继续寻找结束标志
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// i += 1; // 继续寻找起始标志
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 返回找到的所有完整帧
|
||||
// return frames;
|
||||
// }
|
||||
|
||||
// Future<List<Uint8List>> _processCompletePayload(Uint8List payload) async {
|
||||
// // 存储找到的所有完整帧
|
||||
// List<Uint8List> frames = [];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user