2015-10-14 63 views
2

是否有可能從ObjectInputStream在while循環,這將通過異常終止通過套接字超時拋出socket.setSoTimeout(4000);ObjectInputStream中的readObject在while循環

while(Object obj = ois.readObject()) { <-- Not Working 
//do something with object  
} 
+0

@YassinHajaj難道你不覺得如果套接字是活着的,readObject將永遠等待? –

+0

我真的不知道。它應該被測試... –

+0

well readObject阻塞 –

回答

2
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

+0

你可以循環in.readObject();它不會然後讀取同一個對象多次? – Lealo

+0

@Lealo不,當然它不會多次返回相同的東西。什麼閱讀方法呢? – EJP