2011-02-11 76 views
3

我有一个ObjectInputStream连接到一个ObjectOutputStream通过一个插座,我一直在使用Socket.setSoTimeout()使ObjectInputStream.readObject()只阻止100ms。自从我开始这样做以来,我一直在调用readObject(),同时获得了很多StreamCorruptedError。超时是否应该归咎于?在ObjectInputStream.readObject()上设置超时安全吗?

+0

是------------ – 2011-02-11 22:55:01

+0

这听起来像一个非常糟糕的主意。你想达到什么目的?我确定有一个解决方案,但它不是`Socket.setSoTimeout()`。 – biziclop 2011-02-11 22:57:53

回答

5

我有一个线程不断地通过这个函数获取新的数据,但我希望能够通过设置布尔值为false来阻止它。螺纹必须保持轮询布尔,并且如果它遭到封锁不是的readObject()

可以使用了Thread.interrupt让它抛出一个InterruptedException,或在这种情况下,InterruptedIOException。确保你不会吞下异常!

3

如果您设置的超时时间短于读取流时可能出现的正常延迟,那么当流仍处于正常活动状态时,可以预期超时有效。

100 ms似乎很长时间,但如果涉及到磁盘或网络流量,则不会发生。尝试用一些荒谬的东西超时,就像秒钟一样。