Различия синтаксического анализа в Java (JAXP) в DocumentBuilder

Есть ли какая-то разница между

  1. DocumentBuilder.parse(InputStream) а также
  2. 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);
}
Другие вопросы по тегам