XML の解析に Xerces ライブラリを使用しています。解析用のコード スニペットは次のとおりです。
ドキュメント doc = builder.parse(new InputSource(new StringReader(someXMLString)));
手動でInputStream
inを閉じる必要がありますか?それともメソッドで処理しますか?InputSource
parse
XML の解析に Xerces ライブラリを使用しています。解析用のコード スニペットは次のとおりです。
ドキュメント doc = builder.parse(new InputSource(new StringReader(someXMLString)));
手動でInputStream
inを閉じる必要がありますか?それともメソッドで処理しますか?InputSource
parse
外部リソースがないことを考えると、それを閉じる必要StringReader
はありません。とにかくそうします...別の入力を使用するようにコードを変更した場合、誤ってリソースリークが発生することはありません。
(単なる使い捨てコードの場合はそのままにしておきますが、注意しないと、使い捨てコードは予想よりも長く存続する傾向があることに注意してください。)
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には何もないため、この動作は保証されません。
自分で閉じてください。
builder.parse メソッドは、その実装でストリームを閉じません。ストリームを閉じるのに適した時期がわからないため、ストリームを手動で閉じる必要があります。
try-with を使用する場合は、java に閉じさせることができます。それ以外の場合は、手動で閉じることをお勧めします。
InputStream
close()
メソッドのため、閉じられているはずです:
この入力ストリームを閉じ、ストリームに関連付けられているシステム リソースをすべて解放します。
ストリームがリソースを使用するかどうかは問題ではありません。ストリームを閉じるには良い方法です。念のために。
InputSource
ストリームの便利なクラス ラッパーなので、その中のストリームを閉じません。