【问题标题】:How to clone an InputStream to allow reading from both streams ( original and clone)? [duplicate]如何克隆 InputStream 以允许从两个流(原始和克隆)中读取? [复制]
【发布时间】:2016-07-16 19:10:33
【问题描述】:

我有一个 InputStream,我读取其中的数据以将其记录在屏幕上。然后,我希望将此数据传递给 StaxParser。然而,staxparser 不知道从字符串连续输入,而是输入流。

所以我想克隆相同的输入流以从中读取两者。

你有更好的主意吗?如果没有,我该如何克隆 InputStreams?

亲切的问候,

【问题讨论】:

    标签: java stax


    【解决方案1】:

    您可以将阅读的内容存储在String 中,然后用它创建一个InputStream,并将其传递给解析器:

    InputStream is = new ByteArrayInputStream(srcString.getBytes());
    

    或者,您有几种方法可以从同一个 Stream 重新读取,请参见此处:

    Read stream twice

    【讨论】:

      【解决方案2】:

      “克隆”输入流的一种方法如下: 请注意,您需要处理异常:)

      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      byte[] buffer = new byte[1024];
      int len;
      while ((len = input.read(buffer)) > -1 ) {
          byteArrayOutputStream.write(buffer, 0, len);
      }
      byteArrayOutputStream.flush();
      
      InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); 
      

      也可以参考How to clone an InputStream? 了解更多选项。

      【讨论】:

        猜你喜欢
        • 2011-08-20
        • 2011-01-28
        • 2020-06-08
        • 2014-05-06
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 2015-10-02
        相关资源
        最近更新 更多