現在の Eclipe Juno Release Candidate でいくつかの古いコードを開いたところ、光沢のある新しい警告であるリソース リークに気付きました。次のようなコードによってトリガーされました。
FileChannel out = new FileOutputStream(file).getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
Eclipse は、作成されたファイル出力ストリームがリソース リークであると考えています。実際、これが誤った警告なのか (また、FileChannel の close メソッドもストリームを閉じないのか)、それとも本当にリソース リークなのかはわかりません。コードを次のように変更しました。
FileOutputStream outStream = new FileOutputStream(file);
try
{
FileChannel out = outStream.getChannel();
...Do something with out...
}
finally
{
outStream.close();
}
警告はなくなりましたが、FileChannel の close メソッドを呼び出す必要があるかどうかはわかりません。したがって、おそらく次のようになります。
FileOutputStream outStream = new FileOutputStream(file);
try
{
FileChannel out = outStream.getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
}
finally
{
outStream.close();
}
ファイル入力チャネルとファイル出力チャネルを使用すると、4 つの入れ子になった try...finally ブロックが発生し、すべて肥大化します。
どう思いますか?チャネルとストリームを閉じる必要は本当にありますか? それとも、ストリームを閉じるだけで十分ですか?