junior
Чем отличаются и что общего у InputStream, OutputStream, Reader, Writer?
Эти четыре класса образуют фундамент системы ввода/вывода Java, представляя собой корневые абстрактные классы двух пар: байтовой и символьной.
| Характеристика | InputStream | OutputStream | Reader | Writer |
|---|---|---|---|---|
| Направление | Чтение | Запись | Чтение | Запись |
| Тип данных | byte (8 бит) | byte (8 бит) | char (16 бит, Unicode) | char (16 бит, Unicode) |
| Базовый метод | read() |
write(int) |
read() |
write(int) |
| Реализует | Closeable | Closeable, Flushable | Closeable | Closeable, Flushable |
Общее
- Все четыре — абстрактные классы, определяющие контракты для своих иерархий.
- Все реализуют
Closeable(иAutoCloseable), что позволяет использоватьtry-with-resources. - Все используют паттерн Декоратор для добавления функциональности (буферизация, сжатие, кодирование).
- У всех есть методы
close()для освобождения ресурсов.
Различия
- Байтовые потоки (
InputStream/OutputStream) работают с сырыми байтами и подходят для любых данных (бинарные файлы, изображения, сеть). - Символьные потоки (
Reader/Writer) работают с символами Unicode и предназначены для текстовых данных с учётом кодировки. - Потоки вывода (
OutputStream/Writer) дополнительно реализуют интерфейсFlushableс методомflush()для принудительного сброса буфера.
Мост между байтовыми и символьными потоками обеспечивают InputStreamReader (байты в символы при чтении) и OutputStreamWriter (символы в байты при записи).
На собеседовании: покажите понимание двух измерений: тип данных (byte vs char) и направление (чтение vs запись). Упомяните мосты InputStreamReader/OutputStreamWriter и общие черты (AutoCloseable, паттерн Декоратор).