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 }
Advertisement
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
.