21

My background is .net, I'm fairly new to Java. I'm doing some work for our company's java team and the architect needs me to implement a method that takes an InputStream (java.io) object. In order to fulfill the method's purpose I need to convert that into a byte array. Is there an easy way to do this?

1
  • Be aware that this may be memory hogging. Commented Jan 29, 2010 at 17:18

2 Answers 2

62

The simplest way is to create a new ByteArrayOutputStream, copy the bytes to that, and then call toByteArray:

public static byte[] readFully(InputStream input) throws IOException
{
    byte[] buffer = new byte[8192];
    int bytesRead;
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    while ((bytesRead = input.read(buffer)) != -1)
    {
        output.write(buffer, 0, bytesRead);
    }
    return output.toByteArray();
}
Sign up to request clarification or add additional context in comments.

2 Comments

Make sure you flush the outputstream before returning.
@quikchange: There's no need when you're using a ByteArrayOutputStream - where would it buffer to?
9

A simple way would be to use org.apache.commons.io.IOUtils.toByteArray( inputStream ), see apache commons io.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.