读取输入流两次
2022-08-31 07:29:00
如何读取同一输入流两次?是否可以以某种方式复制它?
我需要从网络获取图像,将其保存在本地,然后返回保存的图像。我只是认为使用相同的流会更快,而不是开始一个新的流到下载的内容,然后再次阅读它。
如何读取同一输入流两次?是否可以以某种方式复制它?
我需要从网络获取图像,将其保存在本地,然后返回保存的图像。我只是认为使用相同的流会更快,而不是开始一个新的流到下载的内容,然后再次阅读它。
您可以使用 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);
}
根据输入流的来源,您可能无法重置它。您可以使用 检查 是否支持 和 是否受支持。mark()
reset()
markSupported()
如果是,您可以调用 InputStream 返回到开头。如果没有,则需要再次从源中读取 InputStream。reset()