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 }
请注意,注释中用于测试null
的readObject()
返回值的建议是不正确的。 如果你写了一个null
它只会返回null
。