InputSource和InputStream有什么不同?

2022-08-11 00:00:00 xml xml-parsing java inputstream

在解析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);

那么在性能上有什么不同吗?还是在其他地方?


解决方案

anInputSource可以从InputStream读取,但也可以从Reader或直接从url读取(打开流本身)。从InputStream解析等同于从new InputSource(theStream)解析。

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

相关文章