错误与bencode和种子文件

问题描述:

我使用此bencode https://github.com/dampcake/bencode解码种子文件。我有一个问题: 编码的torrent文件看起来是这样的:错误与bencode和种子文件

d8:announce21:http://127.0.0.1: ....etc..... piece lengthi65536e6:pieces28300:a�ډ|E���� ���#-14 .....etc........ 

的事情是,当我进入这个字符串中的“解码器”,我得到的,因为符号的错误。 这是我的问题:我应该在这些符号之前停止解码吗?或者是正确解码.torrent文件所需的整个字符串?

从我读过的,我需要停止解码在字典的结尾,即。当我遇到了最后的 'e',但我不知道如何正确地识别它..

感谢

UPDATE

这里是我的代码:

byte[] to_decode = null; 

      try { 
       Path path = Paths.get("/user/.../file.torrent"); 
       to_decode = Files.readAllBytes(path);      

      } catch (IOException e) { 
       System.out.println(e.toString()); 
      } 

      //System.out.println(to_decode.toString()); 

      Bencode bencode = new Bencode(); 
      Map<String, Object> dict = bencode.decode(to_decode, Type.DICTIONARY); 

      System.out.println(dict); 

当我运行它,我没有错误,但这种输出:

f<�>�0�1FT���n" ......etc...... 4'}$�Q�3�� Җk�, private=0}} 

所以,考虑到括号,我认为输出是字典,但不是在一个可用的格式,我似乎无法使其工作

任何意见?

+0

它与java无关,是吗? – zubergu

+0

这是因为我正在用java开发一个torrent客户端,所以我没有考虑它就进入了java,但是,我忘了添加适当的标签... – stevemju

+0

@stevemju欢迎来到堆栈溢出。在将来的问题中,请提供错误的详细信息 - 您正在使用的java堆栈跟踪和Java代码。这将有助于确定原因。您也可以*编辑这些提供更多细节的问题。 – Piro

以下规范https://en.wikipedia.org/wiki/Bencode6:pieces28300:a表示存在28300字节长的字符串。所以它也应该被解析。你应该停止在字典的末尾,但它不在6:pieces28300:a(它在最后)。
长度和 都表示您正在处理二进制数据。你没有指定错误,既没有使用源代码,也没有使用错误的字符编码。因此,请检查编码的torrent文件数据的字符编码,并确保在您的Bencode构造函数中使用相同的编码。

+0

感谢您的回答。现在我似乎遇到了读取文件的问题:我使用 'Path path = Paths.get(“path/file.torrent”);' 'to_decode = Files.readAllBytes(path);' and when我打印to_decode我有以下值: '[B @ 42a57993' 它是变量的地址吗?如果是这样,我该如何使用它的价值? – stevemju

+0

[B是字节数组的类名,是@之后的一部分,用于哈希数组的结果。这是Object.toString()方法的默认结果。您要么按原样使用字节,要么从字节创建字符串。 – Piro