while 循环中的 ObjectInputStream readObject
ObjectInputStream readObject in while Loop
是否可以在 while 循环中从 ObjectInputStream
读取,该循环将因套接字超时引发的异常而终止 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
}
当您说 'not working' 时,您真正的意思是 'not compiling',原因在编译器消息中说明: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()
return 值的建议 不 正确。它只会 return null
如果你写 null
.
这是行不通的,因为 while() 里面写的语句不是布尔表达式,所以我们可以这样写:
Object obj = null;
while ((obj = ois.readObject()) != null) {
//do something with object
}
是否可以在 while 循环中从 ObjectInputStream
读取,该循环将因套接字超时引发的异常而终止 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
}
当您说 'not working' 时,您真正的意思是 'not compiling',原因在编译器消息中说明: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()
return 值的建议 不 正确。它只会 return null
如果你写 null
.
这是行不通的,因为 while() 里面写的语句不是布尔表达式,所以我们可以这样写:
Object obj = null;
while ((obj = ois.readObject()) != null) {
//do something with object
}