如何克隆 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 以模拟不支持标记的输入流的标记/重置吗?