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 ключевых подклассов с кратким назначением. Покажите понимание деления на узловые и обрабатывающие потоки. Упомяните, что
StringBufferInputStreamdeprecated.