I\'m trying to get my head around the ObjectInputStream/ObjectOutputStream, so I create a very simple server-client application where the client sends a HashMap object
You're reading the object twice, but only printing the second time. So the client is probably shutdown by the time you try to read the second time, and so the socket has been closed on the remote end, hence exception.
You're reading in an object on the != null check. You don't print it. Then you try to read it again and it bombs.
Once you read from the stream, it's been read. It's a stream, not a buffer. You might want to buffer the read, and then you can inspect that buffer as much as you like.
Simplest example...
Object o = outputStream.readObject();
if(o != null) {
system.out.println(o);
}