2017-10-18 5 views
0

このbencode https://github.com/dampcake/bencodeを使用してトレントファイルをデコードしています。私は、問題が生じています: エンコードされたトレントファイルは次のようになります。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に入ったので、私はJavaでtorrentクライアントを開発しているからですが、はい、私は適切なタグを追加するのを忘れていました... – stevemju

+0

@stevemju今後の質問では、エラーの詳細を提供してください - あなたが使用しているJavaのスタックトレースとJavaコード。これは原因の特定に役立ちます。この質問を編集して詳細を提供することも自由です。 – Piro

答えて

-1

以下の仕様https://en.wikipedia.org/wiki/Bencode6:pieces28300:aは、28300バイトの長い文字列があることを意味します。だから、それも解析する必要があります。あなたは辞書の終わりに止まるべきですが、それは6:pieces28300:aにありません(最後です)。
長さとBothの両方は、バイナリデータを扱っていることを示します。エラーを指定するのではなく、使用しているソースコードを指定していませんが、間違った文字エンコーディングを使用しています。したがって、エンコードされたトレントファイルデータの文字エンコーディングをチェックし、Bencodeコンストラクタで同じエンコーディングを使用することを確認してください。

+0

あなたの答えをありがとう。今私はファイルを読むことに問題があるようです:私は 'Path path = Paths.get(" path/file.torrent ");' 'to_decode = Files.readAllBytes(パス);' 私はto_decodeを出力します。私は以下の値を持っています: '[B @ 42a57993' 変数のアドレスですか?もしそうなら、その価値をどうやって使うのですか? – stevemju

+0

[Bはバイト配列のクラス名で、@の後の部分はその配列のハッシング結果です。これは、Object.toString()メソッドのデフォルトの結果です。バイトをそのまま使用するか、バイトからStringを作成します。 – Piro

関連する問題