Java(JAXP)DocumentBuilder的XML解析差异

发布于 2024-10-04 02:18:19 字数 229 浏览 2 评论 0原文

之间有什么区别吗

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

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

我还应该注意其他几点(例如性能)吗?

Is there any kind of difference between

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

I could only find that for the first case, the parser detects the encoding from the stream so it is safer while in the latter I am not sure if it is required to set the encoding.

Any other points (e.g. performance) I should be aware?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

游魂 2024-10-11 02:18:19

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

第二个,DocumentBuilder.parse(InputSource) ,也允许您从二进制源(这是一个 InputStream impl)读取数据从字符源(Reader 实现)。因此,通过这个,您可以使用 XML 字符串(使用 StringReader),或 BufferedReader

虽然使用第二种方法您已经有机会处理 InputStreams,但第一种方法是一种快捷方式,因此当您有 InputStream 时,您不需要创建一个新的InputSource。事实上,InputStream方法的源码是:

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);
}

The main difference is that the first one allows you to read your XML content only from binary sources, based on the implementations of the InputStream interface. I.e: directly from a file (using a FileInputStream), an open Socket (from Socket.getInputStream()), etc.

The second one, DocumentBuilder.parse(InputSource), allows you to read data from binary sources too (this is, an InputStream impl) and from character sources (Reader implementations). So, with this one you can use an XML String (using a StringReader), or a BufferedReader.

While with the second method you already have the chance to handle InputStreams, the first one is a kind of shortcut, so when you have an InputStream you don't need to create a new InputSource. In fact, the source code of the InputStream method is:

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文