有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java解析连续的XML文档流

我有一个用于外部系统的socket连接,该系统接受命令并以XML格式发送结果。每个命令和结果都是一个独立的XML文档

我应该使用哪个Java解析器(/组合)来:

  • 在不关闭连接的情况下连续解析流(我知道这很愚蠢,但我以前尝试过DOMParser,当流上遇到另一个完全可以理解的文档根时,它会抛出一个异常)。我需要这样的东西:不断地读取流,当一个文档被完全接收时,进行处理。我不知道文档有多大,所以我需要让解析器来确定文档的结尾
  • 将每个传入文档反序列化为bean实例(类似于XStream)
  • 将命令对象从带注释的类实例序列化到输出流(类似于XStream)。我不想使用两个单独的库进行发送和接收

共 (3) 个答案

  1. # 1 楼答案

    XStream.createObjectInputStream似乎是你需要的。我不确定提供的流是否必须将所有对象包含到根节点中,但无论如何,您可以安排一个inputstreams,添加一些虚拟内容以适应XStream的需要。稍后我将扩展此答案

    http://x-stream.github.io/objectstream.html有一些样本

    根节点

    实际上,读取器需要一个根节点。因此,您需要一个输入流,它读取<object-stream>加上实际字节内容,再加上末尾的</object-stream>(如果您介意的话)。根据您的需要(inputstream、readers),实现可能略有不同,但可以完成

    样本

    您可以使用SequenceInputStream将虚拟内容连接到原始inputstream:

    InputStream realOne = ..
    // beware of the encoding!
    InputStream root = new ByteArrayInputStream("<object-stream>".toBytes("UTF-8")); 
    InputStream all = new SequenceInputStream(root, realOne);
    
    xstream.createObjectInputStream(withRoot); // voi lá
    

    如果你使用阅读器。。。好必须有某种等价物:)

  2. # 2 楼答案

    我会说你读了一个完整的回答,然后解析它。然后读另一个。我认为没有必要不断阅读回复