修改torrent返回值

Change-Id: I2422c278a5e88524ad06123b5dbf8628962dfd1a
diff --git a/src/main/java/com/example/g8backend/util/BencodeUtil.java b/src/main/java/com/example/g8backend/util/BencodeUtil.java
new file mode 100644
index 0000000..4ec9ce1
--- /dev/null
+++ b/src/main/java/com/example/g8backend/util/BencodeUtil.java
@@ -0,0 +1,49 @@
+package com.example.g8backend.util;
+
+import com.example.g8backend.dto.AnnounceResponseDTO;
+
+import java.io.ByteArrayOutputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+public class BencodeUtil {
+    public static byte[] encodeAnnounceResponse(AnnounceResponseDTO dto) {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        try {
+            out.write('d'); // dictionary start
+
+            writeString(out, "interval");
+            writeInt(out, dto.getInterval());
+
+            writeString(out, "peers");
+            out.write('l'); // list start
+            for (Map<String, Object> peer : dto.getPeers()) {
+                out.write('d');
+                writeString(out, "ip");
+                writeString(out, (String) peer.get("ip"));
+                writeString(out, "port");
+                writeInt(out, ((Number) peer.get("port")).intValue());
+                out.write('e');
+            }
+            out.write('e'); // list end
+
+            out.write('e'); // dictionary end
+        } catch (Exception e) {
+            throw new RuntimeException("Bencoding failed", e);
+        }
+        return out.toByteArray();
+    }
+
+    private static void writeString(ByteArrayOutputStream out, String str) throws Exception {
+        byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
+        out.write(String.valueOf(bytes.length).getBytes(StandardCharsets.UTF_8));
+        out.write(':');
+        out.write(bytes);
+    }
+
+    private static void writeInt(ByteArrayOutputStream out, int i) throws Exception {
+        out.write('i');
+        out.write(String.valueOf(i).getBytes(StandardCharsets.UTF_8));
+        out.write('e');
+    }
+}