Object中的ObjectInputStream readObject

是否可以在while循环中读取ObjectInputStream ,它将由socket超时socket.setSoTimeout(4000);抛出的exception终止socket.setSoTimeout(4000);

 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流结束的正确方法是catch 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 } 

请注意,注释中用于测试nullreadObject()返回值的建议是正确的。 如果你写了一个null它只会返回null