java解析连续的XML文档流
我有一个用于外部系统的socket连接,该系统接受命令并以XML格式发送结果。每个命令和结果都是一个独立的XML文档
我应该使用哪个Java解析器(/组合)来:
- 在不关闭连接的情况下连续解析流(我知道这很愚蠢,但我以前尝试过DOMParser,当流上遇到另一个完全可以理解的文档根时,它会抛出一个异常)。我需要这样的东西:不断地读取流,当一个文档被完全接收时,进行处理。我不知道文档有多大,所以我需要让解析器来确定文档的结尾李>
- 将每个传入文档反序列化为bean实例(类似于XStream)
- 将命令对象从带注释的类实例序列化到输出流(类似于XStream)。我不想使用两个单独的库进行发送和接收李>
# 1 楼答案
嗯XStream.createObjectInputStream似乎是你需要的。我不确定提供的流是否必须将所有对象包含到根节点中,但无论如何,您可以安排一个inputstreams,添加一些虚拟内容以适应XStream的需要。稍后我将扩展此答案
http://x-stream.github.io/objectstream.html有一些样本
根节点
实际上,读取器需要一个根节点。因此,您需要一个输入流,它读取
<object-stream>
加上实际字节内容,再加上末尾的</object-stream>
(如果您介意的话)。根据您的需要(inputstream、readers),实现可能略有不同,但可以完成样本
您可以使用SequenceInputStream将虚拟内容连接到原始inputstream:
如果你使用阅读器。。。好必须有某种等价物:)
# 2 楼答案
我会说你读了一个完整的回答,然后解析它。然后读另一个。我认为没有必要不断阅读回复
# 3 楼答案
您最好的选择可能是SAX解析器。使用它,您可以实现
ContentHandler
文档,并在其中的endDocument
方法中执行处理并准备下一个文档。请查看此页面:http://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html-以获取解释和示例