Основные отличия:
- Сканер
- Простой текстовый сканер, который может анализировать примитивные типы и строки с помощью регулярных выражений.
- Сканер разбивает свои входные данные на токены, используя шаблон разделителя, который по умолчанию соответствует пробелу. Полученные токены могут быть затем преобразованы в значения различных типов с использованием различных следующих методов.
Пример
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
печатает следующий вывод:
1
2
red
blue
Тот же вывод может быть сгенерирован с помощью этого кода, который использует регулярное выражение для анализа всех четырех токенов сразу:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(result.group(i));
s.close(); `
BufferedReader:
Считывает текст из потока ввода символов, буферизует символы, чтобы обеспечить эффективное чтение символов, массивов и строк.
Размер буфера может быть указан или размер по умолчанию может быть использован. Значение по умолчанию достаточно велико для большинства целей.
Как правило, каждый запрос чтения, сделанный устройством чтения, вызывает соответствующий запрос чтения основного символа или байтового потока. Поэтому желательно обернуть BufferedReader вокруг любого Reader, чьи операции read () могут быть дорогостоящими, например FileReaders и InputStreamReaders. Например,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
буферизует ввод из указанного файла. Без буферизации каждый вызов read () или readLine () может привести к тому, что байты будут считаны из файла, преобразованы в символы и затем возвращены, что может быть очень неэффективным.
Программы, использующие DataInputStreams для ввода текста, могут быть локализованы путем замены каждого DataInputStream соответствующим BufferedReader.
Источник: Ссылка