简体   繁体   中英

ObjectInputStream readObject in while Loop

Is it possible to read from ObjectInputStream in while loop which will terminate by exception thrown by socket timeout 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    
}

When you say 'not working', what you really mean is 'not compiling', for reasons that are stated in the compiler message: Object isn't a boolean expression, and you can't declare a variable in a while condition.

However the code isn't valid anyway. The correct way to read to end of stream of an arbitrary ObjectInputStream is catch EOFException , for example as follows:

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
}

Note that the suggestion in comments to test the readObject() return value for null is not correct. It will only return null if you wrote a null .

This is not working because the statement was written inside while() is not a boolean expression, So we can write this as below:

Object obj = null;
while ((obj = ois.readObject()) != null) {
//do something with object  
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM