InputStream会保存一个位置:Stream.Position,表示当前流中的位置,每次读取都是从这个位置开始,并且读取完成之后会把这个位置设置为最后读取的位置,因此第一次读整个Stream,Position到了末尾或者close了,第二次就读不到内容。此时,可以先把InputStream转化成ByteArrayOutputStream,后面要使用InputStream对象时,再从ByteArrayOutputStream转化回来就好了.
例子如下:
InputStream input = response.body().byteStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len=-1;
while ((len = input.read(buffer)) = -1 ) {
baos.write(buffer, 0, len);
}
baos.flush();
input.close
InputStream input1 = new ByteArrayInputStream(baos.toByteArray());
InputStream input2 = new ByteArrayInputStream(baos.toByteArray());
input1和input2就可以随便虐待了。