7

findbugsで重大なエラーが発生します:

このメソッドは、IOストリームオブジェクトを作成し、それをフィールドに割り当てたり、他のメソッドに渡したり、返したりすることはなく、メソッドからのすべての可能な例外パスでオブジェクトを閉じるようには見えません。これにより、ファイル記述子のリークが発生する可能性があります。一般に、finallyブロックを使用して、ストリームが確実に閉じられるようにすることをお勧めします。

try {
...
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
...
} catch (IOException e) {
    throw new RuntimeException(e);
} finally {
    try {
        if (stdError != null) {
            stdError.close();
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

InputStreamReaderも閉じる必要がありますかp.getErrorStream(それは戻りますInputStream)?

4

2 に答える 2

5

BufferedReaderオブジェクトの作成中に例外がスローされるとどうなりますか?オブジェクトによって管理されるストリームはInputStreamReader、ガベージコレクターがオブジェクトを破棄することを決定する将来のある時点まで閉じられません。

オブジェクトの作成中に例外がスローされた場合も、同様の問題が発生する可能性がありInputStreamReaderます。

于 2010-04-17T10:32:32.547 に答える
4

BufferedReaderとInputStreamReaderはどちらも、閉じられると基になるストリームを閉じます。あなたは閉じることによって元気になるはずですstdError

于 2010-04-17T10:27:50.803 に答える