0

In my code I want the following functionality :

InputStream is = getInputStream()
byte[] buffer = ByteStreams.toByteArray(is);
function1(buffer)
function2(is)

But what I observe is that if ByteStreams.toByteArray(is); is called then function2 is not working properly. It works fine if I comment that particular line. Also it works fine if I convert buffer back to stream; i.e. function2( new ByteArrayInputStream(buffer)) works.

Can you please help me understand what is happening here.

png
  • 4,368
  • 7
  • 69
  • 118

1 Answers1

1

InputStreams have a hidden state: the position in the stream. When anyone reads from an InputStream the position changes. This means you can't read a stream twice, you have to create a new stream.

ByteStreams.toByteArray has to read from the stream, so it changes the position.

Joni
  • 108,737
  • 14
  • 143
  • 193