вопрос о закрытии потока / сокета в Java - PullRequest
4 голосов
/ 15 июня 2010

когда методы socket.close () и someStream.close () генерируют IOException? и как я могу решить проблему?

спасибо Benny.

Ответы [ 3 ]

2 голосов
/ 15 июня 2010

Что вы должны сделать, зависит от вашего приложения.Например, если это приложение с графическим интерфейсом пользователя, и пользователь пытался сохранить файл, вы, вероятно, захотите уведомить пользователя и дать ему возможность сохранить файл в другом месте.Иногда также имеет смысл попытаться снова выполнить операцию во второй раз, прежде чем сообщить об ошибке пользователю.В противном случае сообщите об ошибке и продолжите или прервите программу в зависимости от того, имеет ли смысл продолжать или нет.

2 голосов
/ 15 июня 2010

Не проверка возвращаемого значения close () является распространенной, но, тем не менее, серьезной ошибкой программирования.Вполне возможно, что ошибки в предыдущей операции write (2) сначала сообщаются в финальном закрытии ().Не проверка возвращаемого значения при закрытии файла может привести к потере данных без вывода сообщений.Особенно это можно наблюдать с NFS и с дисковой квотой.

Несмотря на то, что закрытие потока, доступного только для чтения, не может генерировать, инфраструктура ввода-вывода Java не может проверить это, так как не имеет статически проверенных потоков чтения и записи.

0 голосов
/ 15 июня 2010

В этом вопросе SO рассматриваются ситуации, в которых close() может вызвать исключение. На самом деле их довольно много.

Вообще говоря, вы мало что можете сделать, чтобы решить проблему. Однако вам может потребоваться предпринять некоторые действия по восстановлению. Например:

  • Если вы писали критический файл, а close() не удался, то ваше приложение должно предпринять шаги, чтобы гарантировать, что оно не заглушит «хорошую» копию файла новой копией файла. писал.

  • Если вы писали запрос или ответ, используя сетевой сокет, возможно, вам следует учесть, что запрос / ответ может не был отправлен, поэтому вы можете отправить его после того, как соединение был восстановлен.

Конечно, в общем случае также неплохо сообщать / регистрировать "сбой".

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