2017-10-18 79 views
0

我使用此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

回答

-1

以下規範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