В Java классы BufferedReader и Scanner обычно используются для чтения входных данных из различных источников. Хотя оба класса служат одной и той же цели, между ними есть некоторые ключевые различия. В этой статье будут рассмотрены эти различия и приведены примеры кода, иллюстрирующие их использование.
- BufferedReader
Класс BufferedReader в основном используется для эффективного чтения текста из потока символов, например чтения из файла или сетевого подключения. Он буферизует входные данные, что повышает производительность за счет уменьшения количества операций ввода-вывода.
Вот пример использования BufferedReader для чтения ввода с консоли:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReaderExample {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter your name: ");
String name = reader.readLine();
System.out.println("Hello, " + name + "!");
reader.close();
}
}
- Scanner
Класс Scanner, с другой стороны, предоставляет более расширенные возможности анализа и обычно используется для анализа форматированного ввода. Он может токенизировать и анализировать входные данные на основе разделителей и поддерживает различные типы данных, такие как int, double и String.
Вот пример использования сканера для чтения ввода с консоли:
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your age: ");
int age = scanner.nextInt();
System.out.println("You are " + age + " years old.");
scanner.close();
}
}
Сравнение:
- Производительность: BufferedReader обычно быстрее, чем Scanner, при чтении больших объемов текста благодаря механизму буферизации.
- Разбор: Scanner предоставляет более удобные методы анализа различных типов данных, тогда как BufferedReader требует дополнительной логики анализа.
- Источники ввода: BufferedReader подходит для чтения из потоков символов (например, файлов), тогда как Scanner более универсален и может читать из различных источников, включая файлы, консольный ввод и строки.