В чем разница между этими двумя способами получения информации от пользователя? - PullRequest
0 голосов
/ 18 марта 2019

В чем разница между этими двумя способами получения ввода от пользователя?

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num=Integer.parseInt(br.readLine());

И

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

Здесь предполагается, что пакеты io и util импортируются соответственно.

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Это просто два совершенно разных животных. При чтении из потока вы читаете простые количества ... символы, байты, строки. Затем, как вы показываете, вам нужно добавить дополнительный код для интерпретации этих величин более высокоуровневым способом.

Согласно документации для сканера:

Простой текстовый сканер, который может анализировать примитивные типы и строки используя регулярные выражения.

Таким образом, Сканер добавляет еще один уровень функциональности поверх потока. Парсит вход. Он разбивает входящие данные на части и пытается интерпретировать их различными способами, более сложными, чем просто байты или строки. Сканер предоставляет вам множество функций, которые вы должны написать сами, если бы использовали простой поток.

Чтобы ответить на ваш конкретный вопрос несколько более остро ... оба предложенных блока кода дают требуемый результат? Если это так, и если вы не собираетесь читать и читать что-либо еще из потока, то, возможно, использование Scanner - это излишнее количество. Если вы собираетесь продолжать читать только целые числа из потока, возможно, лучше использовать необработанный поток. Но если вы в следующий раз захотите прочитать строку текста, или значение с плавающей запятой, или что-то еще, тогда, вероятно, вам нужен Scanner. Сканер обладает умом для работы с новыми строками. Вы должны сделать это самостоятельно с помощью основного потока.

0 голосов
/ 18 марта 2019

BufferedReader имеет значение

  1. Старше
  2. Большой (8 КБ)
  3. Синхронизирован (замедляет работу)
  4. Читает только строки.

Пока сканер

  1. Новый
  2. Малый буфер (1 КБ)
  3. Не синхронизирован
  4. Может анализировать пользователявведите и прочитайте int, short, byte, float, long и double кроме String.

Обратите внимание, что Scanner при использовании регулярных выражений работает медленно, что делает BufferedReader более быстрым для чтения String.

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