Gymterview
junior

В чем разница между PrintWriter и ServletOutputStream

PrintWriter — класс для работы с символьным потоком (text), а ServletOutputStream — для работы с байтовым потоком (binary). Выбор зависит от типа данных, которые отправляются клиенту.

Критерий PrintWriter ServletOutputStream
Тип данных Текстовые (HTML, JSON, XML) Бинарные (изображения, PDF, файлы)
Получение response.getWriter() response.getOutputStream()
Кодировка Учитывает charset ответа Байты передаются «как есть»
Буферизация Автоматическая буферизация символов Работает с необработанными байтами

PrintWriter автоматически конвертирует символы в байты с учётом заданной кодировки (response.setCharacterEncoding("UTF-8")). ServletOutputStream даёт полный контроль над байтами и используется для передачи файлов, изображений, потоковых данных.

На собеседовании: ключевой момент — нельзя вызывать оба метода для одного ответа. Попытка вызвать getWriter() после getOutputStream() (или наоборот) приведёт к IllegalStateException.