Android: ByteStreams.toByteArray 是否更改源内容

Android: does ByteStreams.toByteArray change content of source

在我的代码中,我需要以下功能:

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

但我观察到,如果调用 ByteStreams.toByteArray(is);,则 function2 无法正常工作。如果我评论那条特定的行,它就可以正常工作。 如果我将缓冲区转换回流,它也能正常工作; IE。 function2( new ByteArrayInputStream(buffer)) 有效。

你能帮我理解这里发生的事情吗?

InputStreams 有一个隐藏状态:流中的位置。当任何人从 InputStream 中读取时,位置会发生变化。这意味着您不能读取一个流两次,您必须创建一个新流。

ByteStreams.toByteArray 必须从流中读取,所以它改变了位置。