Различия синтаксического анализа Java (JAXP) в DocumentBuilder - PullRequest
8 голосов
/ 23 ноября 2010

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

  1. DocumentBuilder.parse(InputStream) и
  2. DocumentBuilder.parse(InputSource)?

Я мог только обнаружить, что в первом случае парсер обнаруживает кодировку из потока, так что это безопаснее, тогда как в последнем случае я не уверен, требуется ли устанавливать кодировку.

Любые другие моменты (например, производительность), которые я должен знать?

1 Ответ

4 голосов
/ 23 ноября 2010

Основное отличие состоит в том, что первое позволяет вам читать ваш 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...