Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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    
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
901 views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...