8

間に何か違いはありますか

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

最初のケースでは、パーサーがストリームからエンコーディングを検出するため、より安全であることがわかりましたが、後者では、エンコーディングを設定する必要があるかどうかはわかりません。

他に注意すべき点 (パフォーマンスなど) はありますか?

4

1 に答える 1

6

InputStream主な違いは、最初のものでは、インターフェイスの実装に基づいて、バイナリ ソースからのみ XML コンテンツを読み取ることができることです。つまり、ファイルから直接 ( を使用FileInputStream)、開いているソケット ( からSocket.getInputStream()) など。

2 つ目の では、バイナリ ソース (これはimpl)および文字ソース (実装)からDocumentBuilder.parse(InputSource)もデータを読み取ることができます。したがって、これを使用すると、XML 文字列 ( を使用) または.InputStreamReaderStringReaderBufferedReader

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);
}
于 2010-11-23T15:18:35.177 に答える