Медленное чтение файла - PullRequest
0 голосов
/ 04 ноября 2011

Чтение небольшого файла (138 кб) из внутренней памяти телефона происходит очень медленно.Это занимает около 490 мс .Запись того же файла выполняется всего за 70 мс .(измерено в эмуляторе)

Есть предложения по ускорению?

Спасибо, Александр Мильке, Берлин

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 голосов
/ 04 ноября 2011

Я бы не стал ничего тестировать на эмуляторе. Вы могли бы ускорить процесс, убедившись, что ваш BufferedReader имеет относительно большой буфер. Скажи 4к-иш. Несколько лет назад я проводил общие тесты на Java для определения оптимального размера буфера, и при превышении 1-2 КБ это, похоже, не сильно помогло.

Попробуйте это на телефоне.

Почему чтение медленнее, чем письмо, мне не подходит, но опять же, эмулятор не там, где вы хотите тестировать.

Вы можете попытаться изменить расположение буфера. Поместите буфер вокруг потока, а не читателя:

новый BufferedReader (новый InputStreamReader (новый BufferedInputStream (fileInputStream, 2048))))

Я предполагаю, что вы использовали BufferedReader для возможности чтения построчно. Создание двух буферов, вероятно, не очень хорошо, поэтому если у вас есть способ читать строки, не требующие BufferedReader, вам, вероятно, лучше.

0 голосов
/ 04 ноября 2011

Ваша проблема в том, что вы читаете построчно, но пишете за один раз. Попробуйте прочитать файл в буфер за один раз вместо цикла while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...