Зачем нужен 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 — локальная установка не требуется.
Все уроки этого курса
- Зачем нужен BufferedReader
- Чтение строк
- Разбор чисел из ввода
- Безопасное закрытие потоков