我正在为我正在制作的torrent下载系统实现一个本机编码系统。
预编码一个字符串非常简单,你拿一个字符串,例如"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));
}它是有效的,但我有一种感觉,它可以做得更好。做这件事最好的方法是什么?
注意:字符串可以是任何大小(因此字符串前面有多个数字)
已经解决了,感谢在这里回复的每个人:)
发布于 2012-09-16 07:18:42
string.substring(string.indexOf(':'))
这就是您需要做的全部工作。您已经知道了数据的大小,因为您将所有数据都放在一个String中。
发布于 2012-11-03 06:44:01
Java字符串表示Unicode字符序列。您不应该使用它们来进行本机编码/解码,因为那样会遇到编码问题。
例如,字典键必须按它们的二进制表示进行排序,而不是按字符串排序。Bencoded数据没有固有的字符集,因为值可以包含原始二进制(如散列)或utf-8编码字符串(utf对字节序列有效的字符串施加约束)。
您应该改为使用ByteBuffers或普通的byte[]数组。
发布于 2012-09-16 07:16:43
使用string.split(":")来获取字符串的两边...
然后按您希望的方式对两者进行解析。
https://stackoverflow.com/questions/12443171
复制相似问题