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

时间:2016-03-29 09:46:35

标签: java stax

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

所以我想克隆相同的输入流来从中读取它们。

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

亲切的问候,

2 个答案:

答案 0 :(得分:2)

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

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

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

Read stream twice

答案 1 :(得分:1)

克隆"克隆"输入流将如下: 请注意,您需要处理异常:)

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?了解更多选项。