Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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    
}
like image 797
N Kumar Avatar asked Jul 09 '26 05:07

N Kumar


1 Answers

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.

like image 131
user207421 Avatar answered Jul 11 '26 19:07

user207421



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!