Java (JAXP) XML parsing differences of DocumentBuilder
Is there any kind of difference between
DocumentBuilder.parse(InputStream)
andDocumentBuilder.parse(InputSource)
?
I could only find that for the first case, the parser detects the encoding from the stream so it is safer while in the latter I am not sure if it is required to set t开发者_运维问答he encoding.
Any other points (e.g. performance) I should be aware?
The main difference is that the first one allows you to read your XML content only from binary sources, based on the implementations of the InputStream
interface. I.e: directly from a file (using a FileInputStream
), an open Socket (from Socket.getInputStream()
), etc.
The second one, DocumentBuilder.parse(InputSource)
, allows you to read data from binary sources too (this is, an InputStream
impl) and from character sources (Reader
implementations). So, with this one you can use an XML String (using a StringReader
), or a BufferedReader
.
While with the second method you already have the chance to handle InputStreams
, the first one is a kind of shortcut, so when you have an InputStream
you don't need to create a new InputSource
. In fact, the source code of the InputStream
method is:
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);
}
精彩评论