Шаг 89.
Язык программирования Java.
Классы InputStream и OutputStream

На этом шаге мы рассмотрим классы InputStream и OutputStream

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

Класс InputStream является абстрактным и определяет в Java модель потокового ввода байтов. Он реализует интерфейсы AutoCloseable и Closeable. При возникновении ошибок ввода-вывода большинство методов этого класса генерируют исключение типа IOException (за исключением методов mark() и markSupported()). В таблице 1 перечислены методы из класса InputStream.

Таблица 1. Методы из класса InputStream
Функция Описание
int available() Возвращает количество байтов, вводимых данных, доступных в данный момент для чтения.
void close() Закрывает источник ввода данных. При всякой последующей попытке прочитать данные из этого источника будет сгенерировано исключение типа IOException.
void mark(int count) Размещает на текущей позиции в потоке ввода метку, которая остается достоверной до тех пор, пока не будет прочитано заданное количество байтов count.
boolean markSupported() Возвращает логическое значение true, если методы mark() и reset() поддерживаются вызывающим потоком ввода.
int read() Возвращает целочисленное представление следующего байта, доступного в потоке ввода. По достижении конца данных возвращает значение -1.
int read(byte[] b) Пытается прочитать в указанный буфер b количество байтов, равное размеру буфера. Возвращает количество успешно прочитанных байтов. По достижении конца данных возвращает значение -1.
int read(byte[] b, int start, int count) Пытается прочитать в указанный буфер b заданное количество байтов count, начиная с позиции b[start]. Возвращает количество успешно прочитанных байтов. По достижении конца данных возвращает значение -1.
void reset() Перемещает указатель ввода на установленную ранее метку.
long skip(long count) Игнорирует (то есть пропускает) заданное для ввода количество байтов count. Возвращает количество фактически проигнорированных байтов.

Большинство методов, перечисленных в таблице 1, реализуются в классах, производных от класса InputStream. Исключением из этого правила служат методы mark() и reset(). Поэтому обратите внимание на их присутствие или отсутствие в каждом рассматриваемом далее подклассе, производном от класса InputStream.

Класс OutputStream является абстрактным и определяет потоковый вывод байтов. Этот класс реализует интерфейсы AutoCloseable, Closeable и Flushable. Большинство методов из этого класса возвращают значение типа void и генерируют исключение типа IOException при возникновении ошибок ввода-вывода. Методы из класс OutputStream перечислены в таблице 2.

Таблица 2. Методы из класса OutputStream
Функция Описание
int close() Закрывает поток вывода. Последующие попытки вывести данные в поток приведут к исключению типа IOException.
void flush() Делает конечным состояние вывода, очищая все буфера, в том числе и буфера вывода.
void write(int b) Записывает единственный байт в поток вывода. Обратим внимание на то, что параметр метода write() относится к типу int, что позволяет вызывать этот метод в выражении, не приводя полученный результат обратно к типу byte.
void write(byte[] b) Записывает весь массив байтов в поток вывода.
void write(byte[] b, int start, int count) Записывает часть заданного количества байтов count из указанного массива b, начиная с позиции start.

На следующем шаге мы рассмотрим классы FileInputStream и FileOutputStream

Предыдущий шаг Содержание Следующий шаг