是否有可能從ObjectInputStream
在while循環,這將通過異常終止通過套接字超時拋出socket.setSoTimeout(4000);
ObjectInputStream中的readObject在while循環
while(Object obj = ois.readObject()) { <-- Not Working
//do something with object
}
是否有可能從ObjectInputStream
在while循環,這將通過異常終止通過套接字超時拋出socket.setSoTimeout(4000);
ObjectInputStream中的readObject在while循環
while(Object obj = ois.readObject()) { <-- Not Working
//do something with object
}
while(Object obj = ois.readObject()) { <-- Not Working
//do something with object
}
當你說「不工作」,你真正的意思是讀由於編譯器消息中陳述的原因,'不編譯':Object
不是boolean
表達式,並且不能在while
條件中聲明變量。
但是代碼無論如何都是無效的。閱讀到任意ObjectInputStream
的流的末尾正確的方法是抓EOFException
,舉例如下:
try
{
for (;;)
{
Object object = in.readObject();
// ...
}
}
catch (SocketTimeoutException exc)
{
// you got the timeout
}
catch (EOFException exc)
{
// end of stream
}
catch (IOException exc)
{
// some other I/O error: print it, log it, etc.
exc.printStackTrace(); // for example
}
注意,在意見建議,以測試readObject()
返回值null
是不正確。如果您寫了null
,它將僅返回null
。
@YassinHajaj難道你不覺得如果套接字是活着的,readObject將永遠等待? –
我真的不知道。它應該被測試... –
well readObject阻塞 –