Закрытие BufferedOutputStream также закрывают базовый OutputStream?

Я имел ту же проблему и случайным образом делал такие вещи как (несколько раз):

1) Проект-> Чистый...,
2) близко и открывают Eclipse снова,
3) Выполнение Как...

И это начало работать снова, не изменяя конфигурацию.

12
задан Caroline Orr 17 September 2009 в 14:39
поделиться

2 ответа

Да, закрывает. Что касается того, следует ли вам закрыть его - ожидаете ли вы что-нибудь еще записать в поток ответов? Если нет, думаю, можно закрыть. Если вы не закроете его, вам, очевидно, следует вместо этого промыть его - но я подозреваю, что вы могли бы выяснить это для себя :)

На самом деле поведение унаследовано от FilterOutputStream . В документации Javadocs для FilterOutputStream.close указано: вызывает свой метод flush, а затем вызывает метод закрытия лежащего в его основе выходной поток.

Что касается того, следует ли его буферизовать - я не уверен, что это четко определено. Он может быть где-то похоронен в спецификации сервлета - и он может даже быть настраиваемым (иногда вам действительно не нужна буферизация, но если вы можете буферизовать весь ответ, это означает, что вы можете обслуживать более удобную страницу с ошибкой, если что-то пойдет не так после вас '' он начал писать).

12
ответ дан 2 December 2019 в 20:18
поделиться

Закрытие BufferedOutputStream также закроет базовый OutputStream. Вы должны закрыть BufferedOutputStream, чтобы он сбрасывал свое содержимое перед закрытием базового потока. Чтобы убедиться в этом, посмотрите реализацию FilterOutputStream.close () (из которой расширяется BufferedOutputStream)

Я предполагаю, что будет ли буферизован поток ответа, переданный вашему сервлету, или нет, зависит от реализации вашего контейнера сервлетов. FWIW Я знаю, что Tomcat по умолчанию буферизует потоки ответов сервлетов, чтобы попытаться установить HTTP-заголовок длины содержимого.

4
ответ дан 2 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: