InputSource和InputStream有什么区别?

Pau*_*uli 4 java xml inputstream xml-parsing

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

没有InputSource:

InputStream is;
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbFactory.newDocumentBuilder();
Document document = db.parse(is);
Run Code Online (Sandbox Code Playgroud)

和InputSource一样,差异在哪里

DocumentBuilder db = dbFactory.newDocumentBuilder();
InputSource inputSource = new InputSource(is);
Document document = db.parse(inputSource);
Run Code Online (Sandbox Code Playgroud)

那么性能有什么不同吗?还是别的什么?

Ian*_*rts 7

一个InputSource可以从读InputStream,但它也可以从一个读取Reader或直接从URL(打开流本身).从解析InputStream等价于从解析new InputSource(theStream).

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