間に何か違いはありますか
DocumentBuilder.parse(InputStream)
とDocumentBuilder.parse(InputSource)
?
最初のケースでは、パーサーがストリームからエンコーディングを検出するため、より安全であることがわかりましたが、後者では、エンコーディングを設定する必要があるかどうかはわかりません。
他に注意すべき点 (パフォーマンスなど) はありますか?
InputStream
主な違いは、最初のものでは、インターフェイスの実装に基づいて、バイナリ ソースからのみ XML コンテンツを読み取ることができることです。つまり、ファイルから直接 ( を使用FileInputStream
)、開いているソケット ( からSocket.getInputStream()
) など。
2 つ目の では、バイナリ ソース (これはimpl)および文字ソース (実装)からDocumentBuilder.parse(InputSource)
もデータを読み取ることができます。したがって、これを使用すると、XML 文字列 ( を使用) または.InputStream
Reader
StringReader
BufferedReader
2 番目の方法ではすでに を処理する機会がありますが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);
}