有什么区别吗
DocumentBuilder.parse(InputStream)
和DocumentBuilder.parse(InputSource)
?
我只能发现对于第一种情况,解析器从流中检测编码,因此它更安全,而在后者中我不确定是否需要设置编码。
我应该注意的任何其他点(例如性能)?
主要区别在于第一个允许您根据InputStream
接口的实现仅从二进制源读取 XML 内容。即:直接来自文件(使用 a FileInputStream
)、打开的 Socket(来自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);
}