javacompiler-errorsobjectinputstream

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    
}

Solution

  • 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.