Java包装InputStream

时间:2011-02-24 17:12:06

标签: java inputstream

我需要反复读取InputStream。该流来自于从Web服务请求中读取一些XML。我想将XML保留在内存中,以便我可以多次解析流,最后在以后废弃XML。 我可以将InputStream包装起来,以便多次访问它?

3 个答案:

答案 0 :(得分:1)

你可以尝试

byte[] bytes = IOUtils.toByteArray(inputStream);

// as often as desired.
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

答案 1 :(得分:1)

假设您正在阅读结构良好的XML文档,为什么不使用DOM解析器一次解析文档(例如,javax.xml.parsers.DocumentBuilder)?

这将以结构化格式为您提供XML文档的内存中表示。如果您使用DocumentBuilder之类的解析器,则随后可以使用NodegetElementsByTagName等方法获取结构化数据的各个部分。

答案 2 :(得分:1)

Apache Commons IO有一个实用程序方法,它将输入流读入字节数组(如果你不想自己编写函数),你可以将它包装在ByteArrayInputStream中,即

InputStream xmlInput = ...;
InputStream rereadableStream = 
    new ByteArrayInputStream(IOUtils.toByteArray(xmlInput));

然后使用mark()/ reset()或者只需保存字节数组并在需要时构造一个新的ByteArrayInputStream。