147

Can we convert a byte array into an InputStream in Java? I have been looking on the internet but couldn't find it.

I have a method that has an InputStream as argument.

The InputStream cph I have is base64 encoded so I had to decode it using

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(cph);

Now how do I convert decodedBytes again to InputStream?

Daniel Rikowski
  • 71,375
  • 57
  • 251
  • 329
rover12
  • 2,806
  • 7
  • 27
  • 28

5 Answers5

323

Use ByteArrayInputStream:

InputStream is = new ByteArrayInputStream(decodedBytes);
Paul Bellora
  • 54,340
  • 18
  • 130
  • 181
Daniel Rikowski
  • 71,375
  • 57
  • 251
  • 329
184

java.io.ByteArrayInputStream extends InputStream to do exactly this:

InputStream myInputStream = new ByteArrayInputStream(myBytes); 
Cody Gray - on strike
  • 239,200
  • 50
  • 490
  • 574
Diego
  • 18,035
  • 5
  • 62
  • 66
24

It is in the javadocs:

byte[] byteArr = new byte[] { 0xC, 0xA, 0xF, 0xE };
InputStream is = new ByteArrayInputStream(byteArr);
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
david
  • 852
  • 1
  • 7
  • 22
4

If you use Robert Harder's Base64 utility, then you can do:

InputStream is = new Base64.InputStream(cph);

Or with sun's JRE, you can do:

InputStream is = new
com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64DecoderStream(cph)

However don't rely on that class continuing to be a part of the JRE, or even continuing to do what it seems to do today. Sun say not to use it.

There are other Stack Overflow questions about Base64 decoding, such as this one.

Community
  • 1
  • 1
Stephen Denne
  • 36,219
  • 10
  • 45
  • 60
  • 10
    Don't use the sun class it's private and should not be used as it can change at anytime. – mP. Nov 26 '09 at 08:12
  • I'll edit my answer to include dire warnings. The code in the question is already using `BASE64Decoder` which is presumably `sun.misc.BASE64Decoder` – Stephen Denne Nov 26 '09 at 08:29
0

Its possible to convert byte[] to InputStream using Guava library as well.

     <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>19.0</version>
    </dependency>



    public static void guavaConversion() throws IOException{
       byte[] bytesArray = {1, 2, 3};
       InputStream inputStream = ByteSource.wrap(bytesArray).openStream();

       System.out.println(inputStream.toString().getBytes().length); //just 
       //for testing
       inputStream.close();
    }
D.S.
  • 137
  • 5