Безопасно ли устанавливать время ожидания для ObjectInputStream.readObject ()? - PullRequest
3 голосов
/ 12 февраля 2011

У меня ObjectInputStream подключен к ObjectOutputStream через сокет, и я использую Socket.setSoTimeout(), чтобы сделать ObjectInputStream.readObject() только блок на 100 мс. С тех пор, как я начал это делать, я получал много StreamCorruptedError звонков readObject(). Может быть виноват тайм-аут?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2011

У меня есть поток, постоянно получающий новые данные через эту функцию, но я хочу иметь возможность остановить его, установив логическое значение в false. Поток должен продолжать опрашивать логическое значение и не может, если он заблокирован readObject ()

Вы можете использовать Thread.interrupt, чтобы позволить ему выбросить InterruptedException, или в этом случае InterruptedIOException. Убедитесь, что вы не глотаете исключения!

3 голосов
/ 12 февраля 2011

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

100 мс кажется длиннымвремя, но не в том случае, если задействован дисковый или сетевой трафик.Попробуйте найти что-нибудь смешное, например, секунду.

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