Re: Buffered reading seems to corrupt data stream

The problem is that for the second or third read, the size variable is
coming back as garbage (extremely high or even negative value) and the
reading of the byte array blocks as it waits for a large amount of
data to be received or crashes with the invalid negative size even
though the previous size value and the previous bytes themselves are
correct. However, if I remove the BufferedInputStream wrapping of
stream, it works perfectly.

Why would that be?

I forgot to mention that there is only *one* input stream (is) and
output stream (os) being used in to the above code. Once the connection
between client and server is established I repeatedly send the fixed
byte array data (fixed for testing purposes) on the connected stream.

It might be, that the BufferedInputStream used for the first read
already read data belonging to the second message, that will get lost
when you dispose the BufferedInputStream and will be missing from the
next read call. The garbage size read is most likely actually a part of
the payload bytes. Try to synchronize server and client somehow to
verify. Better reuse the complete stream chain.