如何克隆 InputStream 以允许从两个流(原始和克隆)中读取? [复制]

Posted

技术标签:

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

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

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

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

亲切的问候,

【问题讨论】:

【参考方案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? 了解更多选项。

【讨论】:

以上是关于如何克隆 InputStream 以允许从两个流(原始和克隆)中读取? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以关闭/重新打开 InputStream 以模拟不支持标记的输入流的标记/重置吗?

java(jdk1.7) IO系列01之InputStream和OutputStream解析

Java 之 数据IO流-DataInputStream

字节输入流

InputStream 没有收到 EOF

如何从字符串创建 InputStream? [复制]