BufferedInputStream to ByteArrayOutputStream very slow

I have a problem very similar to the link below:

PDF to byte array and vice versa

The main difference being I am trying to interpret a Socket connection via a ServerSocket containing Binary, rather than a file. This works as expected.

However, the problem I am having is that this process is taking quite a long time to read into memory, about 1 minute 30 seconds for 500 bytes (although the size of each stream will vary massively)

Here's my code:

BufferedInputStream input = new BufferedInputStream(theSocket.getInputStream());
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();

while ((bytesRead = input.read(buffer)) != -1)
{
    output.write(buffer, 0, bytesRead);
}

byte[] outputBytes = output.toByteArray();

//Continue ... and eventually close inputstream

If I log it's progress within the while loop within the terminal it seems to log all the bytes quite quickly (i.e. reaches the end of the stream), but then seems to pause for a time before breaking out of the while loop and continuing.

Hope that makes sense.

Jon Skeet
people
quotationmark

Well you're reading until the socket is closed, basically - that's when read will return -1.

So my guess is that the other end of the connection is holding it open for 90 seconds before closing it. Fix that, and you'll fix your problem.

people

See more on this question at Stackoverflow