0

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

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

但我观察到的是 ifByteStreams.toByteArray(is);被调用 thenfunction2不能正常工作。如果我评论那条特定的行,它工作得很好。如果我将缓冲区转换回流,它也可以正常工作;即 function2( new ByteArrayInputStream(buffer))有效。

你能帮我理解这里发生了什么吗?

4

1 回答 1

1

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

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

于 2016-03-02T06:34:03.493 回答