我有一个InputStream,它包含我想在返回InputStream之前解析的XML数据。
InputStream is = myObj.getInputStream(); // parse Inputstream here return is;
当然,我可以将流保存为字节数组,并从中返回一个新的InputStream或
在'myObj'上创建第二个InputStream。
但是有什么办法可以“动态”解析流吗?
修改
基本上我正在寻找一种在解析后重用流的方法。解析流而不消耗它,分别在解析后重置它。
解决方案:
我发现的解决方案是使用BufferedInputStream(注释中的注释:那将只能工作8k字节)
BufferedInputStream is = new BufferedInputStream ( myObj.getInputStream() ); is.mark( Integer.MIN_VALUE ); // parse Inputstream here is.reset(); return is;
答案 0 :(得分:2)
要动态解析 ,而无需等待流的结尾,您可以使用Sax Parser。
sax解析器是基于事件的,因此在处理之前无需读取整个文档。有了这个过程就像:
对于每个事件,您需要执行一些自定义代码。
使用sax解析器比dom解析器困难但有一些优点。总而言之,它需要更少的资源,您不需要等待整个文档。
答案 1 :(得分:0)
这可能非常复杂,因为即时xml解析SAX Parser的最佳候选者。根据需要,它是事件驱动的,并依赖于回调方法来指示传入流中的事件。
我通过执行以下操作实现了类似的功能:
这不简单但稳定可靠。我会尝试发布一些演示代码。
答案 2 :(得分:-1)
我找到的解决方案(至少对我有用的解决方案)是使用BufferedInputStream:
BufferedInputStream is = new BufferedInputStream ( myObj.getInputStream() ); is.mark( Integer.MIN_VALUE ); // parse Inputstream here is.reset(); return is;