Расчет времени чтения большого файла с SD-карты на Android - PullRequest
0 голосов
/ 06 апреля 2011

Я хочу получить представление (приблизительное) о том, сколько времени требуется для чтения большого файла (от 50 МБ до 100 МБ), хранящегося на SD-карте Android. Я использую следующий код на Android 2.3.3 на Google Nexus One. Это даст мне разумную оценку? Есть ли стандартный метод, который я должен использовать? Кроме того, будет ли использование собственного кода улучшать производительность файлового ввода-вывода?

Спасибо.

public void readFileFromSDCard() throws IOException
{
    long start = System.currentTimeMillis();
    long size = 0;
    File file = new File(OVERLAY_PATH_BASE + "base-ubuntu.vdi");
    try {

        InputStream in = new FileInputStream(file);
        try {
            byte[] tmp = new byte[4096];
            int l;
            while ((l = in.read(tmp)) != -1) {
                size = size + 4096;
            }
        } finally {
            in.close();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } 
    long end = System.currentTimeMillis();
    Log.e(LOG_TAG,
            "Reading file " + file.getAbsolutePath() + " with " + size  + "bytes took " + (end-start) + " ms.");

}

1 Ответ

1 голос
/ 06 апреля 2011

Самое простое, что можно сделать для этого кода, - это определить, сколько времени занимает итерация цикла while и использовать его, чтобы оценить, сколько осталось времени.Например, если вы обрабатываете 0,1 Мб за одну итерацию в секунду, и у вас есть всего 1 Мбайт, вы можете догадаться, что у вас осталось около 9 секунд.

Производительность SD-карты сильно различается для разных телефонови скорость может быть непредсказуемой даже на том же телефоне (например, я получаю большие случайные задержки на моем телефоне для маленьких файлов).Я не думаю, что стоит делать что-то более сложное, чем описанное выше, например, тестирование телефона перед обработкой файла.Вероятно, для большинства целей достаточно процентного бара.

...