FileInputstream和BufferedInputStream在4.0.3中工作,但在4.2.2中不工作

时间:2013-11-09 18:05:20

标签: java android file

我有两部手机,一部带有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上工作?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

确保您拥有READ_EXTERNAL_STORAGE权限。该权限已在Android 4.1 (see docs)中添加。

答案 1 :(得分:-1)

对我来说听起来像编码问题。可能在一部手机中,文件以UTF-8编码(使用两个字节),而在另一部手机中,文件采用ANSI(仅使用一个字节)。

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

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

BufferedReader buf = new BufferedReader(new FileReader(DotTorrentPath));