在我的代码中,我想要以下功能:
InputStream is = getInputStream()
byte[] buffer = ByteStreams.toByteArray(is);
function1(buffer)
function2(is)
但我观察到的是,如果调用ByteStreams.toByteArray(is);
,则function2
无法正常工作。如果我评论该特定行,它工作正常。
如果我将缓冲区转换回流,它也可以正常工作;即
function2( new ByteArrayInputStream(buffer))
有效。
请你帮我理解这里发生的事情。
答案 0 :(得分:1)
InputStreams具有隐藏状态:流中的位置。当任何人从InputStream读取时,位置会发生变化。这意味着您无法读取流两次,您必须创建一个新流。
ByteStreams.toByteArray
必须从流中读取,因此它会改变位置。