首页  >  文章  >  Java  >  如何在不修改输入流的情况下多次读取它?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-26 04:36:31362浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn