首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Java]Bencoding:解码字符串

[Java]Bencoding:解码字符串
EN

Stack Overflow用户
提问于 2012-09-16 07:09:22
回答 4查看 804关注 0票数 0

我正在为我正在制作的torrent下载系统实现一个本机编码系统。

预编码一个字符串非常简单,你拿一个字符串,例如"hello",你通过写字符串长度+一个':‘字符,然后是字符串本身来编码它。预编码的"hello“将是"5:hello”

目前我有这个代码。

代码语言:javascript
复制
public BencodeString(String string) {
    this.string = string;
}

public static BencodeString parseBencodeString(String string) {
    byte[] bytes = string.getBytes();
    int position = 0;
    int size = 0;
    StringBuilder sb = new StringBuilder();
    while (bytes[position] >= '0' && bytes[position] <= '9') {
        sb.append((char) bytes[position]);
        position++;
    }
    if (bytes[position] != ':')
        return null;

    size = Integer.parseInt(sb.toString());
    System.out.println(size);
    if (size <= 0)
        return null;
    return new BencodeString(string.substring(position + 1, size + position
            + 1));
}

它是有效的,但我有一种感觉,它可以做得更好。做这件事最好的方法是什么?

注意:字符串可以是任何大小(因此字符串前面有多个数字)

已经解决了,感谢在这里回复的每个人:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-16 07:18:42

string.substring(string.indexOf(':'))

这就是您需要做的全部工作。您已经知道了数据的大小,因为您将所有数据都放在一个String中。

票数 0
EN

Stack Overflow用户

发布于 2012-11-03 06:44:01

Java字符串表示Unicode字符序列。您不应该使用它们来进行本机编码/解码,因为那样会遇到编码问题。

例如,字典键必须按它们的二进制表示进行排序,而不是按字符串排序。Bencoded数据没有固有的字符集,因为值可以包含原始二进制(如散列)或utf-8编码字符串(utf对字节序列有效的字符串施加约束)。

您应该改为使用ByteBuffers或普通的byte[]数组。

票数 1
EN

Stack Overflow用户

发布于 2012-09-16 07:16:43

使用string.split(":")来获取字符串的两边...

然后按您希望的方式对两者进行解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12443171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档