0Pricing
Java Academy · Урок

Зачем нужен BufferedReader

Буферизованное и небуферизованное чтение

«Зачем нужен BufferedReader» — бесплатный урок Java Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Чтение ввода в Java

Большинству реальных программ нужен ввод от пользователя: имя, число или команда. В Java есть несколько способов читать ввод, но один из самых распространённых и эффективных — BufferedReader.

В этом уроке Вы узнаете, зачем нужен BufferedReader и в каких случаях его стоит использовать.

Откуда берётся ввод

Когда Вы вводите текст в консоли, он поступает через System.in. Это низкоуровневый поток байтов — он предоставляет необработанные байты, а не удобный для чтения текст.

Чтобы превратить эти байты в читаемые символы и целые строки, мы оборачиваем System.in во вспомогательные классы. BufferedReader — это оболочка, которая упрощает эту задачу.

Что означает «буферизованный»

Чтение по одному байту с клавиатуры или из файла выполняется медленно. Буфер — это фрагмент памяти, в котором одновременно хранится много символов.

BufferedReader заполняет этот буфер большими порциями, а затем быстро передаёт Вам данные. Чем меньше обращений к исходному потоку, тем выше производительность, особенно при большом объёме ввода.

Настройка из двух уровней

BufferedReader не может читать System.in напрямую, поскольку этот поток предоставляет байты. Сначала мы оборачиваем его в InputStreamReader, который преобразует байты в символы.

  • System.in → байты
  • InputStreamReader → символы
  • BufferedReader → буферизованные строки
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

Классическая запись в одну строку

Эту точную строку Вы увидите почти в каждой программе на Java, которая читает ввод из консоли. Она объединяет обе оболочки в одном выражении.

Запомните: внутренний InputStreamReader преобразует байты в символы, а внешний BufferedReader добавляет буферизацию и удобный метод readLine().

BufferedReader br =
    new BufferedReader(new InputStreamReader(System.in));

Необходимые импорты

Эти классы находятся в пакете java.io, поэтому их нужно импортировать в начале файла.

Чтение ввода может завершиться ошибкой, поэтому методы выбрасывают IOException — его тоже нужно импортировать или обработать. Эту тему мы разберём позже.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

BufferedReader и Scanner

Начинающие разработчики часто сначала знакомятся с Scanner. Он удобнее (например, умеет напрямую разбирать числа), но работает медленнее.

  • Scanner: простой разбор данных, но больше накладных расходов.
  • BufferedReader: работает быстрее и читает целые строки, но числа нужно разбирать самостоятельно.

При большом объёме ввода или в спортивном программировании BufferedReader выигрывает по скорости.

Чтение целой строки

Главный метод — readLine(). Он считывает всё, что пользователь вводит до нажатия Enter, и возвращает это как String (без символа новой строки).

Если ввод закончился, readLine() возвращает null. Мы разберём это в следующем уроке.

String name = br.readLine();
System.out.println("Hello, " + name);

Полная программа чтения

Вот полноценная программа. Она читает одну строку и приветствует пользователя. Обратите внимание на throws IOException у main — это быстрый способ позволить ошибкам ввода передаваться выше во время обучения.

Этот фрагмент ожидает ввода с клавиатуры, поэтому здесь он не запускается автоматически, но это корректная программа на Java.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        String name = br.readLine();
        System.out.println("Hi " + name);
    }
}

Как доказать работоспособность без ввода

Чтобы убедиться, что оболочки существуют и компилируются, рассмотрим запускаемую версию, которая ничего не читает, а лишь подтверждает создание объекта.

В реальном приложении Вы вызвали бы readLine(), но эта версия выводит сообщение, чтобы её можно было запустить прямо сейчас.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        System.out.println("BufferedReader is ready!");
    }
}

Когда использовать BufferedReader

Используйте BufferedReader, когда Вы:

  • читаете много строк или большие файлы;
  • заботитесь о скорости;
  • хотите простой построчный текстовый ввод.

Используйте вместо него Scanner, если Вам нужен быстрый разбор чисел и объём ввода невелик. Оба варианта подходят — выбирайте правильный инструмент.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли настройку BufferedReader.

Итоги

Вы узнали, что System.in — это поток байтов, который сначала оборачивается в InputStreamReader (байты в символы), а затем в BufferedReader (буферизация и readLine()).

Буферизация повышает производительность, а BufferedReader особенно удобен для большого объёма или построчного ввода. Далее: подробное чтение строк.

Часто задаваемые вопросы

Урок «Зачем нужен BufferedReader» бесплатный?

Да — полный текст урока «Зачем нужен BufferedReader» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Зачем нужен BufferedReader»?

Буферизованное и небуферизованное чтение Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Зачем нужен BufferedReader»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужен BufferedReader
  2. Чтение строк
  3. Разбор чисел из ввода
  4. Безопасное закрытие потоков
← Назад к Java Academy