Java6を想定すると、このコードはファイル記述子のリークから安全です:
{
InputStream in = fileObject.getReadStream();
// fileObject cleans it's internal state in case it throws exception
try {
// do whatever, possibly throwing exception
} finally {
try {
in.close();
} catch (Exception ex) {
// failure to close input stream is no problem
}
}
}
編集:質問をあまり明白にしないようにするために、別の言い方をすれば、上記のコードはこの長いコードと同じです:
{
InputStream in = null;
try {
in = fileObject.getReadStream();
// fileObject cleans it's internal state in case it throws exception
// do whatever, possibly throwing exception
} finally {
if (in != null) {
try {
in.close();
} catch (Exception ex) {
// failure to close input stream is no problem
}
}
}
}
つまり、開いたストリームを返すか例外をスローするメソッドの呼び出しが の直前にあるか、ブロックtry
の内側にあるかは重要ですか?try