2013-06-12 3 views
2

Так я пишу небольшую программу, которая принимает пользовательского вводаВысокая загрузка процессора при чтении из консоли

public class Test { 
    public static void main(String[] args) throws IOException { 
     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
     String something = input.readLine(); 
    } 
} 

Вот это relavent раздел вырезать, я запускаю это и основной поток блоков на Readline(), но мой Использование ЦП ~ 15-20% последовательно.

Что здесь, есть более эффективный способ чтения с консоли.

EDIT: Я нахожусь в Mac OS 10.8, и этот процесс работает 20 минут. Оператор input.readline() заверяется в цикл while с некоторой простой обработкой внутри, но я знаю, что код там не добирается.

+0

Сколько времени это произошло? Возможно, именно JVM завершает запуск ... – SJuan76

+0

Возможно, ваша ОС ограничивает ресурсы вашей программы, поэтому вы получаете максимум 15-20%. –

+0

Я думаю, что предоставление вашего точного ввода было бы полезно. –

ответ

1

Я предполагаю, что у вас есть какой-то код, который проверяет состояние readLine(), иначе Java будет продолжать блокироваться.

String line = null; 
while ((line = br.readLine()) != null) { 
    // handle contents of line here 
} 

Возможно, вам лучше использовать класс сканера для чтения пользовательского ввода.

Scanner sc = new Scanner(System.in); 
int num = sc.nextInt(); 
.... 
+0

Да, извините, его точно так же, как вы подозревали, я не ожидал, что это будет проблема, конечно же, это не то, что вызывает использование ЦП? –

+0

Я только что попробовал использовать сканер, и он по-прежнему составляет около 15% использования. –

+0

Я не уверен в использовании процессора, но я бы рискнул предположить, что если JVM ждет чтения из BufferedReader, это может занять некоторые ресурсы в процессе проверки. – Snapman

Смежные вопросы