Альтернатива BufferedReader
Более быстрое чтение из консоли
«Альтернатива BufferedReader» — бесплатный урок Java Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Более быстрое средство чтения
Scanner удобен, но относительно медленно работает с большими объёмами ввода. Для чтения большого количества данных BufferedReader из java.io работает намного быстрее, поскольку за один раз считывает большие блоки.
Создание BufferedReader
Оберните InputStreamReader вокруг System.in внутри BufferedReader. Здесь мы используем StringReader, чтобы примеры запускались без ввода с клавиатуры.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader("Hello"));
System.out.println(reader.readLine());
reader.close();
}
}readLine возвращает String
readLine() считывает всю строку как объект типа String, не включая разделитель строк. В отличие от Scanner, этот метод всегда возвращает текст, поэтому числа Вам нужно разбирать самостоятельно.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader("first\nsecond"));
System.out.println(reader.readLine());
System.out.println(reader.readLine());
reader.close();
}
}Конец ввода обозначается отсутствием значения
Когда ввод заканчивается, readLine() возвращает null. Это сигнал остановить чтение.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader("one line"));
System.out.println(reader.readLine());
System.out.println(reader.readLine());
reader.close();
}
}Чтение всех строк
Выполняйте цикл, пока результат readLine() не равен null, чтобы обработать каждую строку ввода.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader("a\nb\nc"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println("> " + line);
}
reader.close();
}
}Самостоятельный разбор чисел
Поскольку readLine возвращает текст, преобразуйте его с помощью Integer.parseInt, когда Вам нужно число.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader("42"));
int n = Integer.parseInt(reader.readLine().trim());
System.out.println(n * 2);
reader.close();
}
}Разделение строки на токены
Чтобы считать несколько чисел из одной строки, разделите строку с помощью split и разберите каждую полученную часть.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader("10 20 30"));
String[] parts = reader.readLine().split(" ");
int sum = 0;
for (String p : parts) {
sum += Integer.parseInt(p);
}
System.out.println(sum);
reader.close();
}
}Проверяемые исключения
readLine объявляет проверяемое исключение IOException, поэтому Вам необходимо либо объявить throws IOException, либо обернуть вызов в конструкцию try-catch. Для Scanner это не требуется.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new StringReader("data"));
System.out.println(reader.readLine());
reader.close();
} catch (IOException e) {
System.out.println("Read error");
}
}
}Автоматическое закрытие ресурсов
Используйте конструкцию автоматического управления ресурсами, чтобы средство чтения закрывалось автоматически даже при возникновении исключения.
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
try (BufferedReader reader = new BufferedReader(new StringReader("auto-closed"))) {
System.out.println(reader.readLine());
}
}
}Пример с реальным System.in
Для настоящего ввода с клавиатуры оберните System.in. Запустите этот пример локально, введите строку и нажмите Enter.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter text: ");
String input = reader.readLine();
System.out.println("You typed: " + input);
}
}Scanner и BufferedReader
Выбирайте Scanner для удобства и простого разбора чисел. Выбирайте BufferedReader для быстрого чтения больших объёмов ввода, учитывая, что разбирать данные и обрабатывать IOException Вам придётся самостоятельно.
Быстрая проверка
Проверьте свои знания о BufferedReader.
Итоги
Вы изучили альтернативу BufferedReader:
- Оберните
System.inвInputStreamReader, а затем вBufferedReader readLine()возвращает целую строку илиnullв конце ввода- Разбирайте числа самостоятельно с помощью
Integer.parseIntиsplit - Метод выбрасывает проверяемое исключение
IOException, поэтому его нужно обработать или объявить - Предпочитайте его Scanner при больших объёмах ввода, критичных к производительности
Часто задаваемые вопросы
Урок «Альтернатива BufferedReader» бесплатный?
Да — полный текст урока «Альтернатива BufferedReader» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Альтернатива BufferedReader»?
Более быстрое чтение из консоли Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Альтернатива BufferedReader»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Чтение ввода с помощью Scanner
- Чтение чисел и строк
- Проверка ввода пользователя
- Альтернатива BufferedReader