是否可以从while循环中的ObjectInputStream
读取,该循环将由套接字超时抛出的异常终止socket.setSoTimeout(4000);
while(Object obj = ois.readObject()) { <-- Not Working
//do something with object
}
答案 0 :(得分:2)
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
}
请注意,用于测试readObject()
的{{1}}返回值的评论中的建议不正确。如果您撰写了null
,它只会返回null
。
答案 1 :(得分:0)
这是行不通的,因为while()里面的语句不是布尔表达式,所以我们可以这样写:
Object obj = null;
while ((obj = ois.readObject()) != null) {
//do something with object
}