Различия синтаксического анализа в Java (JAXP) в DocumentBuilder
Есть ли какая-то разница между
DocumentBuilder.parse(InputStream)
а такжеDocumentBuilder.parse(InputSource)
?
Я мог только обнаружить, что в первом случае парсер обнаруживает кодировку из потока, так что это безопаснее, в то время как в последнем случае я не уверен, требуется ли устанавливать кодировку.
Любые другие моменты (например, производительность) я должен знать?
1 ответ
Основное отличие состоит в том, что первый позволяет вам читать ваш XML-контент только из двоичных источников, основываясь на реализациях InputStream
интерфейс. Т.е.: прямо из файла (используя FileInputStream
), открытое гнездо (от 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);
}