Что быстрее в Java для чтения / анализа ввода с консоли, сканера или BufferedReader? - PullRequest
5 голосов
/ 24 сентября 2011

Мне нужно создать процессор данных, способный обрабатывать более 2,5 МБ / с входных данных из STDIN и выводить число в STDOUT. Что быстрее: использовать BufferedReader с последующим преобразованием в типы данных или Scanner и nextInt () или nextFloat ()?

РЕЗУЛЬТАТЫ ЭМПИРИЧЕСКОГО ИСПЫТАНИЯ: BufferedReader и преобразование немного быстрее, но ничего особенного.

Thankyou!

Ответы [ 2 ]

6 голосов
/ 24 сентября 2011

Скорее всего, ответ не имеет значения , каким образом вы делаете это с точки зрения производительности. (И никто не сможет печатать со скоростью 2,5 Мб в секунду на консоли!)

Если при чтении из консоли вы включаете все, что происходит на уровне ОС и в других местах, порядков будет потрачено больше циклов ЦП на получение байтов от пользователя, набирающего текст на консоли, чем провел разбор символов. Если вы читаете из файла (через stdin), мы больше не говорим о разнице порядков, но я все равно был бы удивлен, если бы эти два подхода были существенно различны ... в целом.

Но лучшее, что вы можете сделать, это попробовать . Не нужно больше нескольких минут, чтобы написать тест, который приблизительно соответствует тому, что вы делаете, и посмотреть, какая альтернатива быстрее ... и на сколько. (Убедитесь, что вы измеряете общее истекшее время, а не только процессорное время пользовательского пространства для приложения Java.)

1 голос
/ 24 сентября 2011

BufferedReader читает поток.В то время как Scanner разбивает свой вход на токены.

2,5 МБ / с больше подходит для BufferedReader.Он имеет больший буфер, чем Scanner.От 8 до 1

BufferedReader >>>>

...