私はXMLを解析するためにXercesライブラリを使用しています。以下は、解析用のコードスニペットです。入力ストリームを手動で閉じる必要がありますか?
ドキュメントdoc = builder.parse(new InputSource(new StringReader(someXMLString))));
私は手動でInputSource
でInputStream
を閉じる必要がありますかparse
方法は、それを処理しますか?
私はXMLを解析するためにXercesライブラリを使用しています。以下は、解析用のコードスニペットです。入力ストリームを手動で閉じる必要がありますか?
ドキュメントdoc = builder.parse(new InputSource(new StringReader(someXMLString))));
私は手動でInputSource
でInputStream
を閉じる必要がありますかparse
方法は、それを処理しますか?
DocumentBuilder APIには何もありません。
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については何もないので、この動作は保証されていません。
try-withを使用している場合は、javaで閉じることができます。それ以外の場合は手動で閉じることをお勧めします。
InputStream
はclose()
方法ので、閉鎖されることになって:
この入力ストリームのリリースストリームに関連するすべてのシステムリソースをクローズ。
それは問題ではありませんです、あなたのストリームがリソースを使用するかではない - それは、それを閉じるために良い方法です。念のために。
外部リソースがないことを考えれば、StringReader
- にはが必要です。私はとにかくそれをやろうと思っています...もしあなたがコードを変更して別の入力を使用すると、誤ってリソースが漏れてしまうことはありません。
(ちょうど使い捨てのコードの場合、私はそれを残したい - 。しかし、あなたは注意しないなら、使い捨てのコードが予想よりも長く住んでいるの習慣を持っていることに注意してください)
InputSource
は上だけで便利なクラスラッパーですストリーム内でストリームをクローズしません。
あなた自身で終了してください。
builder.parseメソッドは、その実装でストリームをクローズしません。ストリームのクローズに適しているかどうかはわかりません。そのため、ストリームを手動で閉じる必要があります。
「InputSource」は 'AutoCloseable'ではないので、' StringReader'でそれを行う必要があることに注意してください。 –