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