【发布时间】:2016-07-16 19:10:33
【问题描述】:
我有一个 InputStream,我读取其中的数据以将其记录在屏幕上。然后,我希望将此数据传递给 StaxParser。然而,staxparser 不知道从字符串连续输入,而是输入流。
所以我想克隆相同的输入流以从中读取两者。
你有更好的主意吗?如果没有,我该如何克隆 InputStreams?
亲切的问候,
【问题讨论】:
我有一个 InputStream,我读取其中的数据以将其记录在屏幕上。然后,我希望将此数据传递给 StaxParser。然而,staxparser 不知道从字符串连续输入,而是输入流。
所以我想克隆相同的输入流以从中读取两者。
你有更好的主意吗?如果没有,我该如何克隆 InputStreams?
亲切的问候,
【问题讨论】:
您可以将阅读的内容存储在String 中,然后用它创建一个InputStream,并将其传递给解析器:
InputStream is = new ByteArrayInputStream(srcString.getBytes());
或者,您有几种方法可以从同一个 Stream 重新读取,请参见此处:
【讨论】:
“克隆”输入流的一种方法如下: 请注意,您需要处理异常:)
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? 了解更多选项。
【讨论】: