8

有什么区别吗

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

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

我应该注意的任何其他点(例如性能)?

4

1 回答 1

6

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

第二个DocumentBuilder.parse(InputSource),允许您从二进制源(这是一个InputStreamimpl)字符源(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);
}
于 2010-11-23T15:18:35.177 回答