Gymterview
junior

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

OutputStream — абстрактный класс, определяющий контракт для побайтовой записи данных. Его подклассы, как и у InputStream, делятся на узловые и обрабатывающие.

Класс Тип Назначение
FileOutputStream Узловой Запись данных в файл на диске
ByteArrayOutputStream Узловой Запись в буфер в памяти (массив байт), удобен для формирования данных перед отправкой
PipedOutputStream Узловой Запись в канал, связанный с PipedInputStream (межпоточное взаимодействие)
BufferedOutputStream Обёртка Буферизация записи — накапливает данные и записывает их блоком, уменьшая количество системных вызовов
DataOutputStream Обёртка Запись примитивных типов Java (int, double, UTF-строк) в поток
ObjectOutputStream Обёртка Сериализация объектов в поток
FilterOutputStream Обёртка Базовый класс для потоков-обёрток
PrintStream Обёртка Удобный вывод через методы print() и println(), автоматический flush; System.out и System.err — экземпляры PrintStream

На практике FileOutputStream почти всегда оборачивается в BufferedOutputStream для повышения производительности. ByteArrayOutputStream удобен для формирования данных в памяти (например, при генерации PDF или формировании HTTP-ответа). PrintStream знаком каждому разработчику через System.out.println().

На собеседовании: перечислите 5-6 подклассов. Подчеркните, что System.out — это PrintStream, а FileOutputStream на практике всегда буферизуют.