两次读取流

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

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



哆啦的时光机
浏览 263回答 3
3回答

慕码人2483693

您可以使用org.apache.commons.io.IOUtils.copy将InputStream的内容复制到字节数组,然后使用ByteArrayInputStream从字节数组重复读取。例如:ByteArrayOutputStream baos = new ByteArrayOutputStream();org.apache.commons.io.IOUtils.copy(in, baos);byte[] bytes = baos.toByteArray();// eitherwhile (needToReadAgain) {    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);    yourReadMethodHere(bais);}// orByteArrayInputStream bais = new ByteArrayInputStream(bytes);while (needToReadAgain) {    bais.reset();    yourReadMethodHere(bais);}

慕少森

根据InputStream的来源,您可能无法重置它。您可以使用检查mark()和reset()支持markSupported()。如果是这样,则可以调用reset()InputStream返回到开头。如果不是,则需要再次从源读取InputStream。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java