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

我有一个ObjectInputStream通过套接字连接到ObjectOutputStream ,我一直在使用Socket.setSoTimeout()使ObjectInputStream.readObject()只阻塞100ms。 自从我开始这样做以来,我在调用readObject()时得到了很多StreamCorruptedError 。 超时可能是罪魁祸首吗?

我有一个线程不断通过此函数获取新数据,但我希望能够通过将布尔值设置为false来停止它。 线程必须保持轮询布尔值,如果它被readObject()阻止则不能

您可以使用Thread.interrupt让它抛出InterruptedException ,或者在这种情况下是InterruptedIOException 。 确保你不要吞下exception!

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

100毫秒似乎很长一段时间,但如果涉及磁盘或网络流量则不行。 尝试一些荒谬的东西,比如秒。