2012-09-14 8 views
5

Можно создать дубликат:
PrintWriter and PrintStream never throw IOExceptionsJava: Почему класс PrintWriter или PrintStream не исключает исключения?

Может быть, вопрос немного "странно". Но мне любопытно узнать, почему оба PrintWriter и PrintStream не проверяют автоматически исключения во время выполнения, и они предоставляют метод checkError().

Спасибо всем заблаговременно.

ответ

5

Для PrintStream, который часто записывается в std out или err, этот поток может быть закрыт или отброшен, но вы не хотите, чтобы программа неожиданно завершилась неудачей в качестве результата.

PrintWriter во многом является версией PrintStream для Writer, хотя я не уверен, что было бы неплохо повторить ошибки PrintStream. ;)

Тот факт, что PrintWriter не сообщает, что IOException делает его плохим выбором для записи текста в Socket, где вам часто нужно знать, что соединение не удалось.

1

Я думаю, что это прежде всего потому, что System.err - это PrintStream.

Когда вы обрабатываете исключения в блоке catch, вызов e.printStackTrace() является общим и записывается в System.err. Если этот вызов вызвал исключение, вы потеряете исходное исключение и получите вместо него ошибку PrintStream. Затем вам понадобится дополнительная попытка/улов внутри вашего блока catch, чтобы предотвратить эту проблему, что создает большой беспорядок.

Обратите внимание, что JDK 1.7 устраняет проблему исключения исключения из блока catch и позволяет получить доступ к обоим исключениям.

 Смежные вопросы

  • Нет связанных вопросов^_^