В чем разница между использованием InputSource и InputStream при анализе xml. Я видел оба примера в некоторых учебниках
без 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)
.
Если файл, который вы хотите проанализировать, ссылается на внешний DTD или любые внешние объекты по относительным URI, тогда вы не можете его разобрать из простого InputStream
, поскольку анализатор не знает базовый URL, который он должен использовать для разрешения этих относительных путей, В этом случае вам нужно будет построить InputSource
из потока и использовать setSystemId
чтобы установить базовый URI, а затем проанализировать этот источник, а не просто передавать поток непосредственно в синтаксический анализатор.