Язык SQL

Замечание об обнаружении и обработке ошибок ввода/вывода


Основной проблемой при всех I/O-операциях является обработка ошибок. Большинство’ используемых методов определялись как генерирующие исключительную ситуацию IOException при возникновении ошибок, но ни в одном методе исключительные ситуации не генерировались в явном виде. Как убедиться; что ошибки типа попытки чтения , после конца файла будут вовремя обнаружены и о них будет сообщено?   ч

Метод rekdtength класса Ра >ldOps представляет особый интерес. Он сначала считывает длину значения, затем читает ровно столько байт, сколько указано в длине. Если s ка-; ком-либо месте оказывается конец файла, метод должен генерировать исключительную ситуацию IOException. В приведенном коде метода это соображение игнорируется и явных указаний генерировать исключительную ситуацию не содержится. Изучение документации по Java API дает следующую информацию.

 Метод Datainput.readShort генерирует исключительную ситуацию EOFException, ; если поток достигает конца лрееде, чем прочитаны все байты, и ситуацию’ IOException, в случае возникновения ошибки ввода/вывода.

 Метод Datainput.readFully генерирует EOFException, если поток достигает конца, прежде, чем прочитаны все байты, и IOException при возникновении ошибки ввода/вывода.

Дальнейший анализ позволяет заключить, что методы класса FieldOps обрабатывают возникающие ошибочные ситуации правильно. Например, рассмотрим вызое метода FieldOps. readLength, показанного на 11.8. Если конец файла достигается при вызове метода readlnt или метода readFully, генерируется исключительная ситуация EOFException. Она ситуация не обрабатывается методом readLength, поэтому выполнение этого метода завершается, и исключительная ситуация передается методу, вызывавшему readLength. Аналогично, при возникновении любой ошибки ввода/вывода во время выполнения readLength исключительная ситуация lOExcept ion будет сгенерирована методом readLength. ‘‘-w

Методы read и write класса Movie реализуют конкретное представление объекта в потоке данных. Эти два метода “договариваются” о порядке полей и их представлении. Каждый из них представляет name в виде текстового поля с указанием длины, id как четырехбайтовое целое и genre как текстовое поле с указанием длины.

Было бы удобно добавить дополнительные типы полей к классу FieldOps. В упражнениях в конце главы читателям предлагается добавить к этому классу ограниченные текстовые и определяемые поля.

Комментарии закрыты