Нужно ли очищать OutputStream перед его закрытием?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Нужно ли очищать OutputStream перед его закрытием?

Сообщение Anonymous »

Есть несколько связанных вопросов, но ни один из них не дает полного ответа.
Я предоставляю объект Serializer, и у него есть метод setOutputStream() позволяет пользователю указать место назначения для вывода. По умолчанию он следует протоколу, согласно которому, если пользователь предоставляет выходной поток, пользователь берет на себя ответственность за его закрытие. Однако сериализатор также предоставляет опцию setCloseOnCompletion(boolean); если это вызывается, сериализатор должен сам закрыть поток после завершения записи. (Основная причина предоставления этой опции заключается в том, что в некоторых случаях поток можно закрыть таким образом гораздо раньше, тем самым высвободив ресурсы).
Конечно, сериализатор не знает конкретных подклассов OutputStream, поэтому ему необходимо обработать все возможности.
Мой главный вопрос: следует ли нам вызыватьstream.flush() раньше вызовstream.close()?
Я ожидал, чтоstream.close() автоматически очистит поток, если это необходимо, но этого не произошло. похоже, в контракте OutputStream нет ничего, что предписывает это.
Во-вторых, если я все-таки вызовуstream.flush(), что мне делать, если это терпит неудачу? Рискую ли я, что произойдет сбой только потому, что поток уже закрыт, и в этом случае в идеале я хотел бы игнорировать ошибку? Есть ли какой-нибудь способ проверить, закрыт ли уже поток, прежде чем я попытаюсь использовать флеш()?
Если бы я разрабатывал этот API сегодня, я бы, вероятно, заменил setCloseOnCompletion(boolean) с setCompletionAction(Action) – но это не так.

Подробнее здесь: https://stackoverflow.com/questions/790 ... closing-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»