在ObjectInputStream.readObject()上设置超时是否安全?
我有一个ObjectInputStream
通过套接字连接到ObjectOutputStream
,我一直在使用Socket.setSoTimeout()
使ObjectInputStream.readObject()
只阻塞100ms。 自从我开始这样做以来,我在调用readObject()
时得到了很多StreamCorruptedError
。 超时可能是罪魁祸首吗?
我有一个线程不断通过此函数获取新数据,但我希望能够通过将布尔值设置为false来停止它。 线程必须保持轮询布尔值,如果它被readObject()阻止则不能
您可以使用Thread.interrupt让它抛出InterruptedException
,或者在这种情况下是InterruptedIOException
。 确保你不要吞下exception!
如果将超时设置为短于读取流中可能发生的正常延迟,则可以预期超时在流仍处于正常活动状态时生效。
100毫秒似乎很长一段时间,但如果涉及磁盘或网络流量则不行。 尝试一些荒谬的东西,比如秒。