|
|
@@ -100,12 +100,27 @@ public class PictureMessageServiceImpl extends ServiceImpl<PictureMessageMapper,
|
|
|
// 保存数据段
|
|
|
synchronized (lock) {
|
|
|
int index = Integer.parseInt(packageNumber) - 1;
|
|
|
- if (index >= allDataSegments.size()) {
|
|
|
- for (int i = allDataSegments.size(); i <= index; i++) {
|
|
|
- allDataSegments.add(null);
|
|
|
+ // 检查是否所有数据包都已经收到
|
|
|
+ if (Integer.parseInt(packageNumber) == Integer.parseInt(total)) {
|
|
|
+ // 如果这是最后一个包,则直接处理完整数据
|
|
|
+ } else {
|
|
|
+ // 初始化 allDataSegments 到正确大小,如果还没有的话
|
|
|
+ if (allDataSegments.size() < Integer.parseInt(total)) {
|
|
|
+ synchronized (lock) {
|
|
|
+ while (allDataSegments.size() < Integer.parseInt(total)) {
|
|
|
+ allDataSegments.add(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 确保 index 不会越界
|
|
|
+ if (index >= 0 && index < allDataSegments.size()) {
|
|
|
+ allDataSegments.set(index, segment);
|
|
|
+ } else {
|
|
|
+ log.warn("Invalid package number: " + packageNumber + ". Index out of bounds: " + index);
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
- allDataSegments.set(index, segment);
|
|
|
|
|
|
System.out.println("packageNumber====="+packageNumber+"total====="+total);
|
|
|
// 检查是否所有数据包都已经收到
|