Понимание различий между BufferedReader и Scanner в Java

В Java классы BufferedReader и Scanner обычно используются для чтения входных данных из различных источников. Хотя оба класса служат одной и той же цели, между ними есть некоторые ключевые различия. В этой статье будут рассмотрены эти различия и приведены примеры кода, иллюстрирующие их использование.

  1. 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();
    }
}
  1. 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();
    }
}

Сравнение:

  1. Производительность: BufferedReader обычно быстрее, чем Scanner, при чтении больших объемов текста благодаря механизму буферизации.
  2. Разбор: Scanner предоставляет более удобные методы анализа различных типов данных, тогда как BufferedReader требует дополнительной логики анализа.
  3. Источники ввода: BufferedReader подходит для чтения из потоков символов (например, файлов), тогда как Scanner более универсален и может читать из различных источников, включая файлы, консольный ввод и строки.