我有两部手机,一部带有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上工作?
感谢您的帮助
答案 0 :(得分:0)
确保您拥有READ_EXTERNAL_STORAGE权限。该权限已在Android 4.1 (see docs)中添加。
答案 1 :(得分:-1)
对我来说听起来像编码问题。可能在一部手机中,文件以UTF-8编码(使用两个字节),而在另一部手机中,文件采用ANSI(仅使用一个字节)。
尝试检查两个文件是否具有相同的编码...
此外,文档recommends使用FileReader从文件中读取字符而不是字节。
BufferedReader buf = new BufferedReader(new FileReader(DotTorrentPath));