6

XML の解析に Xerces ライブラリを使用しています。解析用のコード スニペットは次のとおりです。

ドキュメント doc = builder.parse(new InputSource(new StringReader(someXMLString)));

手動でInputStreaminを閉じる必要がありますか?それともメソッドで処理しますか?InputSourceparse

4

6 に答える 6

6

外部リソースがないことを考えると、それを閉じる必要StringReaderはありません。とにかくそうします...別の入力を使用するようにコードを変更した場合、誤ってリソースリークが発生することはありません。

(単なる使い捨てコードの場合はそのままにしておきますが、注意しないと、使い捨てコードは予想よりも長く存続する傾向があることに注意してください。)

于 2012-12-25T08:33:51.233 に答える
2

DocumentBuilderAPIにはそれについて何もないようです。次のようにテストできます

InputStream is = new FileInputStream("test.xml") {
    @Override
    public void close() throws IOException {
        System.out.println("close");
        super.close();
    }
};
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
documentBuilder.parse(is);

印刷しcloseます。ただし、APIには何もないため、この動作は保証されません。

于 2012-12-25T08:44:47.533 に答える
1

自分で閉じてください。

builder.parse メソッドは、その実装でストリームを閉じません。ストリームを閉じるのに適した時期がわからないため、ストリームを手動で閉じる必要があります。

于 2012-12-25T08:36:47.070 に答える
0

try-with を使用する場合は、java に閉じさせることができます。それ以外の場合は、手動で閉じることをお勧めします。

于 2012-12-25T08:31:50.500 に答える
0

InputStreamclose()メソッドのため、閉じられているはずです:

この入力ストリームを閉じ、ストリームに関連付けられているシステム リソースをすべて解放します。

ストリームがリソースを使用するかどうかは問題ではありません。ストリームを閉じるには良い方法です。念のために。

于 2012-12-25T08:32:02.933 に答える
0

InputSourceストリームの便利なクラス ラッパーなので、その中のストリームを閉じません。

于 2012-12-25T08:35:55.283 に答える