Java(JAXP)XML解析DocumentBuilder的差异

两者之间有什么区别吗?

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

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

我应该知道的任何其他要点(例如表演)?

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

第二个, DocumentBuilder.parse(InputSource) ,允许您从二进制源(这是一个InputStream impl) 字符源( Reader实现)读取数据。 因此,使用此字符串可以使用XML String(使用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); }