首页 > Java > java教程 > 正文

如何在不修改输入流的情况下多次读取它?

Mary-Kate Olsen
发布: 2024-10-26 04:36:31
原创
378 人浏览过

How to Read from an Input Stream Multiple Times Without Modifying it?

保留输入流以进行顺序读取

在某些情况下可能需要多次读取输入流而不修改它或创建新流场景,例如下载图像并将其保存到本地时。幸运的是,可以复制输入流以进行重复访问。

一种方法涉及利用 org.apache.commons.io.IOUtils.copy 方法将输入流内容传输到字节数组中。然后可以使用 ByteArrayInputStream 重复读取此字节数组。

ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();
登录后复制

从那里,您可以遵循以下任一方法:

  • 重复创建 ByteArrayInputStream:

    while (needToReadAgain) {
      ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
      yourReadMethodHere(bais);
    }
    登录后复制
  • 重置 ByteArrayInputStream:

    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    while (needToReadAgain) {
      bais.reset();
      yourReadMethodHere(bais);
    }
    登录后复制

警告: 由于潜在的内存耗尽,将完整流复制到内存中可能不适合大型或无限流。在这种情况下,可能需要替代方法,例如使用缓冲区或单独的数据结构。

以上是如何在不修改输入流的情况下多次读取它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!