Загрузка файла в основную память - PullRequest
0 голосов
/ 22 марта 2012

У меня есть этот текстовый файл, который содержит список слов и набор оценок, связанных с каждым из них.Я хочу прочитать слова из файла и слова и использовать их в моем проекте.Код написан на Java, а сам файл занимает около 13 МБ.Когда я пытаюсь прочитать файл, это занимает около 15 минут, иногда даже больше.Любые идеи о том, как мне следует оптимизировать эту проблему или подходить к ней с нуля.

Операции, выполняемые с файлом: 1. Прочитайте каждую строку (в среднем около 50 символов) 2. Разбейте на токены с помощью одногопробелы (в среднем около 10 токенов) 3. Сохраните сгенерированные токены в массиве (больше ничего на этом этапе)

РЕДАКТИРОВАТЬ: Извините, что раньше не публиковал мой код, это просто ускользнуло от меня.http://pastie.org/3646388 Там есть строка, где я зацикливаюсь до 10000 значений, чтобы посмотреть, получу ли я какой-либо вывод, в отличие от зацикливания до EOF.

1 Ответ

1 голос
/ 22 марта 2012

Вам нужно опубликовать пример кода, в противном случае мы просто размышляем.Однако, если вы используете java.io классы (InputStream или Reader), убедитесь, что вы оборачиваете ваш InputStream или Reader в BufferedInputStream или BufferedReader.

Поскольку вы читаете текст, код дляконструкция вашего читателя может выглядеть примерно так:

new BufferedReader(new InputStreamReader(new FileInputStream("/path/to/file")));

Из BufferedReader JavaDoc:

В общем, каждый запрос на чтение, сделанный Reader, вызывает соответствующийзапрос на чтение из основного символа или байтового потока.Поэтому рекомендуется оборачивать BufferedReader вокруг любого Reader, чьи операции read () могут быть дорогостоящими, например FileReaders и InputStreamReaders.

Вам также следует рассмотреть возможность профилирования вашего кода.Если у вас нет удобного профилировщика, попробуйте JVisualVM .Он поставляется с JDK.

...