Android:ByteStreams.toByteArray改变源的内容

时间:2016-03-02 06:28:18

标签: bytearray bytestream

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

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

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

请你帮我理解这里发生的事情。

1 个答案:

答案 0 :(得分:1)

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

ByteStreams.toByteArray必须从流中读取,因此它会改变位置。