邵洋 1 рік тому
батько
коміт
737db1cbac

+ 19 - 4
environment-data-service/src/main/java/com/zksy/environment/service/impl/PictureMessageServiceImpl.java

@@ -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);
                 // 检查是否所有数据包都已经收到