Быстрый ввод Java - PullRequest
       2

Быстрый ввод Java

3 голосов
/ 10 февраля 2012

Я пытаюсь решить проблему на улице Интервью, мой вопрос связан не с алгоритмом, а с Java .Для решения этой проблемы необходимо взять несколько больших строк ввода (несколько сотен тысяч) из System.in .Каждая строка имеет ожидаемый шаблон из двух или трех токенов, поэтому нет необходимости выполнять какие-либо проверки или синтаксический анализ (что делает Scanner неэффективным).Мой собственный алгоритм является правильным и учитывает очень небольшую часть общего времени выполнения (диапазон 5% -20% в зависимости от крайнего случая).

Проведя некоторые исследования и тестирование, я обнаружил, что для этой проблемы этокласс BufferedReader значительно быстрее, чем класс Scanner для получения введенных данных для этой проблемы.Однако BufferedReader все еще недостаточно быстр для выполнения задачи.Может ли кто-нибудь указать мне статью или API, где я мог бы найти лучший способ получения информации?

Если это важно, я использую BufferedReader , вызывая метод readLine () и метод String split () для разделения токенов.

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Без какой-либо полезной информации я могу дать обобщенный ответ: http://java.sun.com/developer/technicalArticles/Programming/PerfTuning/

0 голосов
/ 10 февраля 2012

BufferedDataInputStream должен работать намного быстрее, чем BufferedReader.

Вы можете найти банку здесь: http://www.jarvana.com/jarvana/view/org/apache/tika/tika-app/0.8/tika-app-0.8.jar!/nom/tam/util/BufferedDataInputStream.class?classDetails=ok.

Javadoc http://skyview.gsfc.nasa.gov/jar/javadocs/nom/tam/util/BufferedDataInputStream.html.

Это часть этого проекта http://skyview.gsfc.nasa.gov/help/skyviewjava.html.

Обратите внимание, что я никогда не проверял это ...

0 голосов
/ 10 февраля 2012

Я могу думать о нескольких вещах (с макушки головы):

  1. попробуйте создать свой собственный ридер или даже забудьте о преобразовании в символы, если это не нужно;
  2. читать целыми блоками, а не только строками
  3. попытаться оптимизировать размер буфера;
  4. Пройдите через символы или байты самостоятельно, пытаясь найти жетоны
  5. оптимизировать вывод компилятора
  6. предварительно скомпилируйте ваши классы для быстрого запуска
  7. использовать профилировщик для проверки медленных мест в вашем коде

Используйте свой мозг и мыслите нестандартно.

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