文件读取速度慢

时间:2011-11-03 20:25:40

标签: android file

从内部手机存储中读取一个小文件(138 kb)非常慢。它需要 490 ms 。只在 70 ms 中写入相同的文件。 (在模拟器中测量)

任何加速建议?

谢谢Alexander Miehlke,柏林

private String readFromInternal(String filename) {
    try {
        FileInputStream fileInputStream = openFileInput(filename);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null)
            stringBuilder.append(line);
        return stringBuilder.toString();
    } catch (Exception e) {
        return null;
    }
}

private boolean writeToInternal(String filename, String text) {
    try {
        FileOutputStream fileOutputStream = openFileOutput(filename, Context.MODE_PRIVATE);
        fileOutputStream.write(text.getBytes());
        fileOutputStream.close();
        return true;
    } catch (Exception e) {
        return false;
    }
}

2 个答案:

答案 0 :(得分:0)

我不会在模拟器上进行任何基准测试。通过确保BufferedReader具有相对较大的缓冲区,可能可以加快速度。说4k-ish。我在几年前做了一般的Java测试以获得最佳的缓冲区大小,并且在1-2k以上,它似乎没什么帮助。

在手机上试试这个。

为什么阅读速度慢于写作速度超出了我的范围,但同样,仿真器并不是您想要进行基准测试的地方。

可能尝试撤消缓冲区位置。将缓冲区放在流而不是读取器周围:

new BufferedReader(new InputStreamReader(new BufferedInputStream(fileInputStream,2048)))

我假设您使用了BufferedReader来逐行读取。创建2个bufferes可能不是很好,所以如果你有办法读取不需要BufferedReader的行,你可能会更好。

答案 1 :(得分:-1)

你的问题是你正在逐行阅读,但一次写作。尝试一次性将文件读入缓冲区而不是while循环。