2016-03-02 2 views
0

В моем коде я хочу следующую функциональность:Android: делает ByteStreams.toByteArray изменить содержание источника

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

Но что я наблюдаю, что если ByteStreams.toByteArray(is); называется то function2 не работает должным образом. Он отлично работает, если я прокомментирую эту конкретную строку. Также он отлично работает, если я конвертирую буфер обратно в поток; то есть function2(new ByteArrayInputStream(buffer)) работ.

Не могли бы вы помочь мне понять, что здесь происходит.

ответ

1

InputStreams имеет скрытое состояние: положение в потоке. Когда кто-нибудь читает из InputStream, позиция меняется. Это означает, что вы не можете прочитать поток дважды, вам нужно создать новый поток.

ByteStreams.toByteArray должен читать из потока, поэтому он меняет положение.