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

时间:2011-02-11 22:32:09

标签: java timeout

我通过套接字将ObjectInputStreamObjectOutputStream相关联,并且我一直使用Socket.setSoTimeout()使ObjectInputStream.readObject()仅阻止100毫秒。自从我开始这样做以来,我在调用StreamCorruptedError时已经获得了很多readObject()个。超时可能是罪魁祸首吗?

2 个答案:

答案 0 :(得分:5)

  

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

阻止则不能

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

答案 1 :(得分:3)

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

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