28

Not sure about how I am supposed to do this. Any help would be appreciated

3
  • Since ByteArrayInputStream are construct from byte[] stackoverflow.com/questions/2163644/… stackoverflow.com/questions/1264709/… Commented Aug 16, 2010 at 18:22
  • What exactly are you doing with images where you wouldn't be using the javax.imageio classes? Commented Aug 16, 2010 at 18:59
  • Uploading to Amazon S3... The Java library I'm using required ByteArrayInputStream for all non-string based data Commented Aug 17, 2010 at 15:45

4 Answers 4

31

Read from input stream and write to a ByteArrayOutputStream, then call its toByteArray() to obtain the byte array.

Create a ByteArrayInputStream around the byte array to read from it.

Here's a quick test:

import java.io.*;

public class Test {


       public static void main(String[] arg) throws Throwable {
          File f = new File(arg[0]);
          InputStream in = new FileInputStream(f);

          byte[] buff = new byte[8000];

          int bytesRead = 0;

          ByteArrayOutputStream bao = new ByteArrayOutputStream();

          while((bytesRead = in.read(buff)) != -1) {
             bao.write(buff, 0, bytesRead);
          }

          byte[] data = bao.toByteArray();

          ByteArrayInputStream bin = new ByteArrayInputStream(data);
          System.out.println(bin.available());
       }
}
Sign up to request clarification or add additional context in comments.

2 Comments

I was almost there! Thanks for the example tho. A true master of IO!
large buffer size though
19

You can use org.apache.commons.io.IOUtils#toByteArray(java.io.InputStream)

InputStream is = getMyInputStream();
ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(is));

3 Comments

why IOUtils.toByteArray(is) instead of is.readAllBytes() ?
@mathiasfk no specific reason, just force of habit (never tried the other)
EDIT: because it is available only since Java 9, and I was using 7 / 8 (tutorialspoint.com/… )
4

Or first convert it to a byte array, then to a bytearrayinputstream.

File f = new File(arg[0]);
InputStream in = new FileInputStream(f);
// convert the inpustream to a byte array
byte[] buf = null;
try {
    buf = new byte[in.available()];
    while (in.read(buf) != -1) {
    }
} catch (Exception e) {
    System.out.println("Got exception while is -> bytearr conversion: " + e);
}
// now convert it to a bytearrayinputstream
ByteArrayInputStream bin = new ByteArrayInputStream(buf);

Comments

0

Using Kotlin and org.apache.commons.io.IOUtils v2 is simple like that:

IOUtils.toByteArray(is).inputStream()

I guess is the same way in Java too.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.