2011-02-11 180 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似乎很長時間,但如果涉及到磁盤或網絡流量,則不會發生。嘗試用一些荒謬的東西超時,就像秒鐘一樣。