【问题标题】:Is setting a timeout on ObjectInputStream.readObject() safe?在 ObjectInputStream.readObject() 上设置超时是否安全?
【发布时间】:2011-02-11 22:32:08
【问题描述】:

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

【问题讨论】:

  • 这听起来是个非常糟糕的主意。你想达到什么目的?我确定有解决方案,但不是Socket.setSoTimeout()
  • 我有一个线程不断通过此函数获取新数据,但我希望能够通过将布尔值设置为 false 来停止它。线程必须不断轮询布尔值,如果被readObject()阻塞则不能轮询

标签: java timeout


【解决方案1】:

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

你可以使用 Thread.interrupt 让它抛出一个InterruptedException,或者在本例中是一个InterruptedIOException。确保不要吞下异常!

【讨论】:

  • 谢谢——我不知道InterruptedIOException's。现在工作正常!
【解决方案2】:

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

100 毫秒似乎很长,但如果涉及磁盘或网络流量,则不会。尝试在一些荒谬的事情上超时,比如一秒钟。

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2012-03-11
    • 2016-04-16
    • 2014-04-05
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多