代码之家  ›  专栏  ›  技术社区  ›  Cratylus

DocumentBuilder的Java(JAXP)XML解析差异

  •  8
  • Cratylus  · 技术社区  · 14 年前

    有什么区别吗

    1. DocumentBuilder.parse(InputStream)
    2. DocumentBuilder.parse(InputSource) ?

    我只能发现在第一种情况下,解析器从流中检测编码,这样更安全,而在后一种情况下,我不确定是否需要设置编码。

    我还需要注意其他要点(例如,表现)吗?

    1 回复  |  直到 9 年前
        1
  •  6
  •   Lernkurve    9 年前

    主要的区别在于,第一种方法允许您仅从二进制源读取XML内容,基于 InputStream 接口。即:直接从文件(使用 FileInputStream ),一个打开的插座(来自 Socket.getInputStream() )等等。

    第二个, DocumentBuilder.parse(InputSource) ,也允许您从二进制源读取数据(这是 输入流 执行) 来自字符源( Reader 实现)。因此,使用这个可以使用XML字符串(使用 StringReader ),或 BufferedReader

    而用第二种方法你已经有机会处理 InputStreams ,第一个是一种捷径,所以当你有一个 输入流 你不需要创建新的 InputSource . 事实上 输入流 方法是:

    public Document parse(InputStream is)
        throws SAXException, IOException {
        if (is == null) {
            throw new IllegalArgumentException("InputStream cannot be null");
        }
    
        InputSource in = new InputSource(is);
        return parse(in);
    }
    
    推荐文章
    robyp7  ·  fo:表到html表-xslt
    9 年前