为了账号安全,请及时绑定邮箱和手机立即绑定

两次读取流

两次读取流

哆啦的时光机 2019-12-11 13:09:05
您如何两次读取同一输入流?是否可以某种方式复制它?我需要从网络获取图像,将其保存在本地,然后返回保存的图像。我只是想,使用相同的流而不是为下载的内容启动新的流然后再次读取它会更快。
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您可以使用org.apache.commons.io.IOUtils.copy将InputStream的内容复制到字节数组,然后使用ByteArrayInputStream从字节数组重复读取。例如:


ByteArrayOutputStream baos = new ByteArrayOutputStream();

org.apache.commons.io.IOUtils.copy(in, baos);

byte[] bytes = baos.toByteArray();


// either

while (needToReadAgain) {

    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

    yourReadMethodHere(bais);

}


// or

ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

while (needToReadAgain) {

    bais.reset();

    yourReadMethodHere(bais);

}



查看完整回答
反对 回复 2019-12-12
?
慕少森

TA贡献2019条经验 获得超9个赞

根据InputStream的来源,您可能无法重置它。您可以使用检查mark()和reset()支持markSupported()。


如果是这样,则可以调用reset()InputStream返回到开头。如果不是,则需要再次从源读取InputStream。


查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 262 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信