Gymterview
junior

Какие подклассы класса InputStream вы знаете, для чего они предназначены?

InputStream — абстрактный класс, определяющий контракт для побайтового чтения данных. Его основные подклассы можно разделить на узловые (источники данных) и обрабатывающие (обёртки).

Узловые подклассы

Класс Назначение
FileInputStream Чтение данных из файла на диске
ByteArrayInputStream Чтение из массива байт в памяти (полезно для тестирования)
PipedInputStream Чтение из канала, связанного с PipedOutputStream (межпоточное взаимодействие)
StringBufferInputStream Чтение из строки (deprecated, заменён на StringReader)

Обрабатывающие подклассы (обёртки)

Класс Назначение
BufferedInputStream Буферизация чтения — уменьшает количество обращений к источнику данных
DataInputStream Чтение примитивных типов Java (int, double, UTF-строк) из потока
ObjectInputStream Десериализация объектов из потока
FilterInputStream Базовый класс для потоков-обёрток, реализующий паттерн Декоратор
PushbackInputStream Позволяет вернуть прочитанные байты обратно в поток
SequenceInputStream Объединяет несколько потоков InputStream в один последовательный поток

На практике чаще всего используются FileInputStream (обычно обёрнутый в BufferedInputStream), ByteArrayInputStream (для тестов и работы с данными в памяти), DataInputStream (для бинарных протоколов) и ObjectInputStream (для десериализации, хотя в современном коде предпочитают JSON/Protobuf).

На собеседовании: перечислите 5-6 ключевых подклассов с кратким назначением. Покажите понимание деления на узловые и обрабатывающие потоки. Упомяните, что StringBufferInputStream deprecated.