Байтовые и символьные потоки


Система ввода-вывода

До этого мы только выводили информацию на экран, но никогда не считывали ее с клавиатуры. Дело в том, что в Java достаточно нетривиальная система ввода-вывода. И если с выводом информации на экран особых проблем не возникает, то ввод информации в программы (в частности, с клавиатуры) — задача не самая простая. Для реализации ввода приходится решать несколько вспомогательных задач, в том числе прибегать к созданию потоков и обрабатывать возможные исключительные ситуации.

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

Ввод и вывод данных в Java реализуется через потоки ввода-вывода (stream) Не надо путать с программными потоками (thread), рассмотренными в лекции «Пакеты и интерфейсы».

Выделяют два типа потоков: байтовые и символьные. На самом деле, в обоих случаях речь идет о байтах, но поскольку символ — это два байта, то при работе с символьными потоками байты обрабатываются, условно говоря, парами.

Для работы с символьными и байтовыми потоками используются специально разработанные для этого классы. Чтобы эти классы стали доступными в программе, необходимо подключить (импортировать) пакет java.io.

 

Байтовые и символьные потоки

На вершине иерархии байтовых потоков находятся два абстрактных класса: InputStream и OutputStream. В этих классах определены методы read() и write(), предназначенные для чтения данных из потока и записи данных в поток соответственно.

Некоторые другие классы байтовых потоков перечислены в табл. 1.

 

Таблица 1.Классы байтовых потоков

Класс байтового потока Описание
InputStream Абстрактный класс, который описывает поток ввода
OutputStream Абстрактный класс, который описывает поток вывода
FilterInputStream Класс, который реализует абстрактный класс InputStream
FilterOutputStream Класс, который реализует абстрактный класс OutputStream
BufferedInputStream Класс буферизованного потока ввода
BufferedOutputStream Класс буферизованного потока вывода
ByteArrayInputStream Класс потока ввода для считывания из массива
ByteArrayOutputStream Класс потока вывода для записи в массив
FileInputStream Класс потока ввода для считывания из файла
FileOutputStream Класс потока вывода для записи в файл
Класс байтового потока Описание
DataInputStream Класс потока ввода с методами для считывания данных стандартных типов Java
DataOutputStream Класс потока вывода с методами для записи данных стандартных типов Java
PrintStream Класс потока вывода, который поддерживает методы print()и println()

 

Иерархия классов для символьных потоков ввода-вывода начинается с абстрактных классов Reader и Writer. В этих классах определены методы read() для считывания символьных данных из потока и write() для записи символьных данных в поток. Некоторые из классов для символьных потоков представлены

и кратко описаны в табл. 2.

Таблица 2.Классы символьных потоков Java

 

Класс символьного потока Описание
Reader Абстрактный класс, который описывает поток ввода
Writer Абстрактный класс, который описывает поток вывода
FilterReader Класс, который описывает отфильтрованный поток ввода
FilterWriter Класс, который описывает отфильтрованный поток вывода
InputStreamReader Класс потока ввода, который переводит байты в символы
OutputStreamWriter Класс потока вывода, который переводит символы в байты
StringReader Класс потока ввода для считывания из текстовой строки
StringWriter Класс потока вывода для записи в текстовую строку
FileReader Класс потока ввода для считывания из файла
FileWriter Класс потока вывода для записи в файл
BufferedReader Класс буферизованного потока ввода
BufferedWriter Класс буферизованного потока вывода
PrintWriter Класс потока вывода, который поддерживает методы print()и println()
CharArrayReader Класс потока ввода для считывания из массива
CharArrarWriter Класс потока вывода для записи в массив
LineNumberReader Класс потока ввода для подсчета текстовых строк

 

 

Часть возможностей ввода-вывода может быть реализована посредством класса System. Класс System содержит три переменных потока: in, out и err. Эти поля имеют атрибуты public и static. В частности: Поле ‰ System.out — поток стандартного вывода. По умолчанию он связан с консолью. Поле System.out является объектом класса PrintStream. Поле ‰ System.in — это поток стандартного ввода. По умолчанию он связан с клавиатурой. Поле является объектом класса InputStream.

Поле ‰ System.err — это стандартный поток ошибок. По умолчанию поток связан с консолью. Поле является объектом класса PrintStream.

Методы для работы с классами потоков ввода-вывода мы рассмотрим на конкретных примерах.

 



Дата добавления: 2016-06-22; просмотров: 4534;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.