System.out.println () не генерирует Exception, но System.in.read () генерирует Exception, почему? - PullRequest
0 голосов
/ 23 октября 2009

Я получил это от Java ™ I / O, 2nd Edition Эллиот Расти Гарольд: -


было бы неудобно оборачивать блок try / catch вокруг каждого вызова System.out.println (), Sun решила, чтобы PrintStream (и более поздние PrintWriter) ловили и использовали любые исключения, генерируемые внутри print () или println ( ) метод. Если вы хотите проверить наличие исключений внутри метода print () или println (), вы можете вызвать checkError ():

public boolean checkError ()

Метод checkError () возвращает TRue, если в этом потоке печати произошло исключение, и false, если нет. Он говорит вам только, что произошла ошибка. Это не говорит вам, какая ошибка произошла. Если вам нужно больше узнать об ошибке, вам придется использовать другой выходной поток или класс записи.


Я просто хочу проверить этот метод checkError для истинного возвращаемого типа ....

Любые подсказки для создания некоторых практических сценариев для этого ... : -)

1 Ответ

4 голосов
/ 23 октября 2009

Вот пара сценариев, где checkError() вернет true:

Сценарий № 1

  1. Открыть поток вывода файла для небольшой файловой системы / устройства; например дискета?
  2. Создать PrintStream
  3. Цикл для постоянной записи в PrintStream.

В конце концов, файловая система заполнится и запись не будет выполнена.

Сценарий № 2

  1. Открыть URL-соединение с некоторым HTTP-сервером.
  2. Получить OutputStream для соединения
  3. Создать PrintStream
  4. Записать некоторые выходные данные в PrintStream.
  5. Вызовите getStatus () для соединения или позвоните closeConnection
  6. Попробуйте написать еще вывод.

Запись теперь должна завершаться сбоем, поскольку соединение HTTP больше не находится в нужном состоянии для отправки данных на удаленный сервер.

Эти сценарии практичны в том смысле, что вы должны быть в состоянии заставить их давать вам ошибки. Но они не совсем реалистичны. Например, вы обычно не используете PrintStream для отправки POST-данных на HTTP-сервер. Но это корень различий между API-интерфейсами OutputStream и PrintStream. API-интерфейсы OutputStream / Writer предназначены для случаев использования, когда приложению необходимо знать, не удается ли выполнить вывод. API-интерфейсы PrintStream / PrintWriter предназначены для «облегченных» сценариев использования, таких как вывод пользовательских сообщений на консоль, где обработка ошибки ... ммм ... трата усилий программиста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...