Object中的ObjectInputStream readObject

时间:2015-10-14 20:48:31

标签: java compiler-errors objectinputstream

是否可以从while循环中的ObjectInputStream读取,该循环将由套接字超时抛出的异常终止socket.setSoTimeout(4000);

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

2 个答案:

答案 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  
}