This question already has an answer here:
Java (JAXP) XML parsing differences of DocumentBuilder

(1个答案)


已关闭6年。




解析xml时使用InputSource和InputStream有什么区别?
我在一些教程中看到了两个例子

没有InputSource:
InputStream is;
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbFactory.newDocumentBuilder();
Document document = db.parse(is);

与InputSource的区别在哪里
DocumentBuilder db = dbFactory.newDocumentBuilder();
InputSource inputSource = new InputSource(is);
Document document = db.parse(inputSource);

那么性能上有什么区别吗?还是其他?

最佳答案

InputSource可以从InputStream读取,但是也可以从Reader读取或直接从URL(打开流本身)读取。从InputStream进行解析等效于从new InputSource(theStream)进行解析。

如果要解析的文件通过相对URI引用了外部DTD或任何外部实体,则您无法从纯InputStream对其进行解析,因为解析器不知道解析该相对路径时应使用的基本URL。 。在这种情况下,您将需要从流中构造一个InputSource并使用setSystemId设置基本URI,然后从该源中进行解析,而不是简单地将流直接传递给解析器。

10-08 09:41