Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 12. Ввод/вывод, апплеты и другие темы . 305

Таблица 12.2 (окончание)

Поточный класс Значение

FileWriter Выходной поток, который записывает в файл FilterReader Отфильтрованный поток ввода FilterWriter Отфильтрованный поток вывода inputstreamReader Поток ввода, который переводит байты в символы LineNumberReader Поток ввода, который считает строки OutputstreamWriter Поток ввода, который переводит символы в байты PipedReader Канал ввода PipedWriter Канал вывода Printwriter Поток вывода, который поддерживает print ( ) и println ( ) PushbackReader Поток ввода, возвращающий символы в поток ввода

Reader Абстрактный класс, который описывает символьный поток ввода

StringReader Поток ввода, который читает из строки stringWriter Поток вывода, который записывает в строку

Writer Абстрактный класс, который описывает символьный поток вывода

Предопределенные потоки

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

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

306 Часть /. Язык Java

System, in — ЭТО объект ТИПЗ InputStream; System, out И System, err — объек-

ты типа Printstream. Это байтовые потоки, хотя они обычно используются, чтобы читать и записывать символы с консоли и на консоль. Однако вы можете упаковать их в символьные потоки, если пожелаете.

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

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

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

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

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

BufferedReader(Reader inpufcReader)

где inputReader — поток, который связан с создающимся экземпляром клас­са BufferedReader. Reader — абстрактный класс. Один из его конкретных подклассов — это inputstreamReader, который преобразовывает байты в сим­волы. Чтобы ПОЛУЧИТЬ InputStreamReader-объект, который связан С System, in,

используйте следующий конструктор:

InputstreamReader(Inputstream inputstream)

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

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

Соседние файлы в папке JavaLit