Как поймать сломанную трубу на розетки? - PullRequest
0 голосов
/ 25 марта 2019

Я написал клиент-серверное приложение на Java с использованием сокетов. Я использую метод writeUnshared() из ObjectOutputStream и readObject() из ObjectInputStream.

Теперь я хотел бы определить, когда разрывается соединение для повторного подключения (например, когда пропадает сигнал Wi-Fi). В настоящее время для ObjectInputStream я ловлю EOFException и для ObjectOutputStream я ловлю IOException, чтобы определить, является ли труба пробойной.

Это правильно, или я должен поймать IOException для обоих потоков?

1 Ответ

1 голос
/ 25 марта 2019

Вы можете воспользоваться Javadoc , который рекомендует перехватывать IOException для всех обычных исключений, связанных с вводом / выводом.

Или вы можете пройти собственное тестирование.

Или вы можете перейти по исходному коду , который показывает, что при использовании режима «блочных данных» EOFException используется при сериализации всякий раз, когда для создания полного объекта недостаточно байтов.Однако это не охватило бы все случаи, когда соединение разрывалось.

Учитывая все обстоятельства, я бы порекомендовал IOException.

...