Java 在ObjectInputStream.readObject()上设置超时是否安全?

Java 在ObjectInputStream.readObject()上设置超时是否安全?,java,timeout,Java,Timeout,我有一个ObjectInputStream通过套接字连接到一个ObjectOutputStream,并且我一直在使用socket.setSortimeout()使ObjectInputStream.readObject()仅阻塞100ms。自从我开始这样做以来,在调用readObject()时,我已经收到了很多streamcorruptedererror。超时可能是原因吗?如果将超时设置为短于读取流时可能发生的正常延迟,则可以预期当流仍处于正常活动状态时,超时将生效 100毫秒似乎是一段很长的时

我有一个
ObjectInputStream
通过套接字连接到一个
ObjectOutputStream
,并且我一直在使用
socket.setSortimeout()
使
ObjectInputStream.readObject()
仅阻塞100ms。自从我开始这样做以来,在调用
readObject()
时,我已经收到了很多
streamcorruptedererror
。超时可能是原因吗?

如果将超时设置为短于读取流时可能发生的正常延迟,则可以预期当流仍处于正常活动状态时,超时将生效

100毫秒似乎是一段很长的时间,但如果涉及到磁盘或网络流量,则不会。试着在一些可笑的事情上超时,比如一秒钟


我有一个线程不断地通过这个函数获取新数据,但我希望能够通过将布尔值设置为false来阻止它。线程必须继续轮询布尔值,如果它被readObject()阻止,则无法进行轮询


您可以使用Thread.interrupt让它抛出
中断异常
,或者在本例中是
中断异常
。确保你没有吞下异常

这听起来真是个坏主意。你想达到什么目标?我确信有解决方案,但它不是Socket.setSoTimeout()。我有一个线程通过这个函数不断获取新数据,但我希望能够通过将布尔值设置为false来阻止它。线程必须继续轮询布尔值,如果它被
readObject()
阻止,则无法进行轮询。谢谢--我不知道
InterruptedIOException
。现在一切正常!