Назовите основные классы потоков ввода/вывода
Основные классы потоков ввода/вывода образуют четыре иерархии, каждая с корневым абстрактным классом.
| Иерархия | Корневой класс | Тип данных | Направление |
|---|---|---|---|
| Байтовый ввод | InputStream |
byte | Чтение |
| Байтовый вывод | OutputStream |
byte | Запись |
| Символьный ввод | Reader |
char | Чтение |
| Символьный вывод | Writer |
char | Запись |
Каждый корневой класс определяет базовый контракт: InputStream предоставляет метод read(), OutputStream — write(), Reader — read(char[]), Writer — write(char[]). Все четыре класса реализуют Closeable (а значит и AutoCloseable), что позволяет использовать их в конструкции try-with-resources.
Конкретные реализации делятся на узловые (работающие с источником данных: FileInputStream, FileReader) и обрабатывающие (добавляющие функциональность: BufferedInputStream, BufferedReader, DataInputStream). Обрабатывающие потоки принимают в конструктор другой поток, реализуя паттерн Декоратор.
На собеседовании: достаточно назвать четыре корневых класса и пояснить, что байтовые работают с
byte, символьные — сchar. Бонус — упомянуть паттерн Декоратор иAutoCloseable.