1

Android 4.2.2を搭載したGalaxy s4とAndroid 4.0.3を搭載したGalaxy s2の2つの電話があります。情報を読むために torrent ファイルを開いています。私はこのコードを得ました:

metafile = new Metafile(new BufferedInputStream(new FileInputStream(DotTorrentPath)));

メタファイルはライブラリのクラスです。私の g4 では、トレント ファイルを解析するライブラリから内部エラーが発生します。java.io.IOException: Problem parsing bencoded file. 私の g2 では、すべて正常に動作します。4.2 の FileInputStream または BufferedInputStream に関する変更についてインターネットを閲覧してきましたが、何も見つかりませんでした。

両方の電話で、DotTorrentPath は /mnt/sdcard/Download/thisisatorrent.torrent です。

ライブラリのコードは

private Object parse(InputStream is) throws IOException {
    is.mark(0);
    int readChar = is.read();
    switch (readChar) {
        case 'i':
            return parseInteger(is);
        case 'l':
            return parseList(is);
        case 'd':
            return parseDictionary(is);
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            is.reset();
            return parseByteString(is);
        default:
            throw new IOException("Problem parsing bencoded file");
    }
}

g2 では、is.read()100 が返されます。g4 では、31 が返されます。まったく同じファイルを使用しています。4.2で動作しない理由はありますか?

助けてくれてありがとう

4

2 に答える 2

0

READ_EXTERNAL_STORAGE 権限があることを確認してください。その許可は Android 4.1 で追加されました(ドキュメントを参照)

于 2013-11-09T18:39:08.207 に答える
-1

私にはエンコードの問題のように聞こえます。おそらく、一方の電話ではファイルが UTF-8 (2 バイトを使用) でエンコードされており、もう一方の電話ではファイルが ANSI (1 バイトのみを使用) でエンコードされています。

両方のファイルのエンコーディングが同じであることを確認してください...

また、ドキュメントでは、FileReader を使用して、ファイルからバイトではなく文字を読み取ることを推奨しています。

BufferedReader buf = new BufferedReader(new FileReader(DotTorrentPath));
于 2013-11-19T16:31:23.723 に答える