一尘不染

Java 两次读取流

java

你如何两次读取同一输入流?是否可以某种方式复制它?

我需要从网络获取图像,将其保存在本地,然后返回保存的图像。我只是想,使用相同的流而不是为下载的内容启动新的流然后再次读取它会更快。


阅读 518

收藏
2020-03-21

共1个答案

一尘不染

你可以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);
}
2020-03-21