0

我正在为我正在制作的洪流下载系统实施一个编码系统。

对字符串进行编码非常简单,您可以获取一个字符串,例如“hello”,然后通过编写字符串长度 + 一个 ':' 字符来对其进行编码,然后是字符串本身。编码后的“hello”将是“5:hello”

目前我有这个代码。

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));
}

它有效,但我觉得它可以做得更好。做这个的最好方式是什么?

注意:字符串可以是任意大小(因此字符串前多于一位)

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

4

4 回答 4

1

Java 字符串表示 Unicode 字符序列。您不应该将它们用于编码/解码,因为这样会遇到编码问题。

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

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

于 2012-11-02T22:44:01.120 回答
0

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

然后根据您的意愿解析两者。

于 2012-09-15T23:16:43.490 回答
0

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

这就是你需要做的。您已经知道数据的大小,因为您将所有数据都保存在String.

于 2012-09-15T23:18:41.680 回答
0

怎么样:

public static BencodeString parseBencodeString(String string)
{
    int colon = string.indexOf(":");
    if(colon >= 0)
    {
        return new BencodeString(string.substring(colon+1));
    }
    return null;
}
于 2012-09-15T23:27:33.223 回答