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на практике всегда буферизуют.