1

我有两部手机,一部带有 android 4.2.2 的 Galaxy s4 和一部带有 android 4.0.3 的 Galaxy s2。我正在打开一个 torrent 文件以阅读信息。我得到了这个代码:

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

元文件是库中的一个类。在我的 g4 上,我从解析 torrent 文件的库中收到一个内部错误。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 编码(占用两个字节),而在另一部手机中,文件以 ANSI 编码(仅使用一个字节)。

尝试检查两个文件是否具有相同的编码...

此外,文档建议您使用 FileReader 从文件中读取字符,而不是字节。

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