Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TarasovVLJavaAndEclipse_11.doc
Скачиваний:
19
Добавлен:
08.04.2015
Размер:
277.5 Кб
Скачать
    1. Предопределенные потоки

Как известно, все программы Java автоматически импортируют пакет java.iang. Этот пакет определяет класс с именемsystem, инкапсулирующий некоторые аспекты исполнительной среды Java. Например, используя некоторые из его методов, можно получить текущее время и параметры настройки различных свойств, связанных с системой. Классsystem содержит также три предопределенные поточные переменныеin, out иerr. Эти поля объявлены вsystem со спецификаторамиpublic иstatic. Это означает, что они могут использоваться любой частью программы, и причем без ссылки на конкретныйsystem-объект.

Объект System.out называют потоком стандартного вывода. По умолчанию с ним связана консоль. На объект system.in ссылаютсякак на стандартный ввод,который по умолчанию связан с клавиатурой. К объекту System.err обращаются как к стандартному потоку ошибок, который по умолчанию также связан с консолью. Однако эти потоки могут быть переназначены на любое совместимое устройство ввода/вывода.

System, in — это объект типа InputStream; System.out и System.err — объекты типа Printstream. Это байтовые потоки, хотя они обычно используются, чтобы читать и записывать символы с консоли и на консоль. Однако их можно упаковать в символьные потоки, если нужно.

В предыдущих примерах использовался объект system.out. Аналогичным образом можно использовать иSystem.err.

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

Java не имеет обобщенного метода консольного ввода, который соответствует стандартной С-функции scanf()или операциям ввода С++.

Консольный ввод в Javaвыполняется с помощью считывания из объектаsystem.in.Чтобы получить символьный поток, который присоединен к консоли, нужно перенести ("упаковывать") System.inвобъект типа BufferedReader.Класс BufferedReader поддерживает буферизированный входной поток. Обычно используется следующий его конструктор:

BufferedReader (Reader inputReader)

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

InputstreamReader (InputStream input Stream)

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

BufferedReader br = new BufferedReader(new InputstreamReader (System, in));

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

Чтение символов

Для чтения символа из BufferedReader используйте методread(). Версияread(), которую мы будем применять, такова:

int read() throws IOException

При каждом вызове read()читает символ из входного потока и возвращает его в виде целочисленного значения. Когдаread()сталкивается с концом потока, то возвращает-1. Как вы видите, он может выбрасывать исключение ввода/вывода (1/O-исключение —IOException).

Следующая программа демонстрирует read(), читая символы с консоли, пока пользователь не напечатает "q":