Java 解析磁力链(Magnet URI)详解
磁力链 (Magnet URI) 是一种常见的 P2P 文件共享链接格式。下面我将详细介绍如何在 Java 中解析磁力链的各个组成部分。
1. 理解磁力链的结构
一个典型的磁力链接(Magnet URI)格式如下:
magnet:?xt=urn:btih:哈希值&dn=显示名称&tr=Tracker 地址&...
磁力链接是一种基于内容寻址的超链接协议,主要用于 P2P 文件共享。其组成部分通过"&"符号连接,每个参数都有特定的功能:
- xt (eXact Topic):
- 核心标识符,使用 URN(统一资源名称) 格式
- 最常见的格式是"urn:btih:"后接 40 个字符的 SHA-1 哈希值
- 示例:
xt=urn:btih:9C1E05D471B855A4A1F1E1F7A5B5E3E7E8E9EA0
- dn (Display Name):
- 人类可读的文件名显示
- 支持多语言,需进行 URL 编码
- 示例:
dn=Ubuntu+20.04+Desktop.iso
- tr (Tracker):
- 可选的 Tracker 服务器地址
- 可包含多个 Tracker,每个用"&tr="分隔
- 示例:
tr=udp://tracker.opentrackr.org:1337/announce
- xl (eXact Length):
- 精确的文件大小(字节)
- 有助于预先分配磁盘空间
- 示例:
xl=2796554240
- as (Acceptable Source):
- 指定可接受的备用源 URI
- 可以是 HTTP/FTP 等其他下载源
- 示例:
as=http://mirror.example.com/ubuntu.iso
- xs (eXact Source):
- 直接资源链接
- 通常用于补充 P2P 下载
- 示例:
xs=http://cdn.example.com/file.ext
附加说明:
- 参数顺序不影响功能
- 所有非 ASCII 字符需进行百分比编码
- 现代客户端还支持 ws (WebSocket) 等新参数
- 哈希算法除了 SHA-1,也可支持 MD5、SHA-256 等
实际应用示例:magnet:?xt=urn:btih:9C1E05D471B855A4A1F1E1F7A5B5E3E7E8E9EA0&dn=Ubuntu+20.04&tr=udp://tracker.opentrackr.org:1337&xl=2796554240&as=http://releases.ubuntu.com/20.04/ubuntu-20.04-desktop-amd64.iso
2. Java 解析磁力链的核心代码
2.1 使用 URI 类解析
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
public {
Map<String, String> URISyntaxException {
Map<String, String> params = <>();
(magnetLink);
uri.getRawQuery();
(query != ) {
String[] pairs = query.split();
(String pair : pairs) {
pair.indexOf();
idx > ? pair.substring(, idx) : pair;
idx > && pair.length() > idx + ? pair.substring(idx + ) : ;
params.put(key, value);
}
}
params;
}
}


