Java(JAXP)XML解析DocumentBuilder的差异
两者之间有什么区别吗?
-
DocumentBuilder.parse(InputStream)
和 -
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); }