Чтение консольного ввода

В Java 1.0 единственным способом выполнения консольного ввода было использование байтового потока, и существует большой объем старого кода, в котором применяется этот подход. Сегодня применение байтового потока для чтения консольного ввода по-прежнему технически возможно, но поступать так не рекомендуется. Предпочтительный метод чтения консольного ввода — это использовать символ-ориентированный поток, что значительно упрощает возможности интернационализации и поддержки разрабатываемых программ.

В Java консольный ввод выполняется чтением System, in. Чтобы получить символьный поток, присоединенный к консоли, вы должны поместить System, in в оболочку объекта Buf f eredReader. Buf f eredReader поддерживает буферизованный входной поток. Наиболее часто используемый его конструктор выглядит так:

BufferedReader(Reader inputReader)

Здесь inputReader — это поток, который связывается с создаваемым экземпляром BufferedReader. Reader — абстрактный класс. Одним из его конкретных наследников является InputStreamReader, который преобразует байты в символы. Для получения объекта InputStreamReader, который присоединен к System, in, служит следующий конструктор:

InputStreamReader(InputStream inputStream)

Поскольку System, in ссылается на объект типа InputStream, он должен быть использован как параметр InputStream. Собрав все вместе, получим следующую строку кода, которая создает Buf feredReader, соединенный с клавиатурой:

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

После выполнения этого оператора br представляет собой основанный на символах поток, подключенный к консоли через System, in.