Я только что открыл какой-то старый код в текущем кандидате на выпуск Eclipe Juno и заметил блестящее новое предупреждение: утечка ресурсов. Он был вызван следующим кодом:Как правильно закрыть FileChannel, полученный из FileOutputStream
FileChannel out = new FileOutputStream(file).getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
Eclipse считает, что созданный поток вывода файла является утечкой ресурсов. На самом деле я не уверен, что это ложное предупреждение (и метод close FileChannel также не закрывает поток), или если это действительно утечка ресурсов. Я изменил код так:
FileOutputStream outStream = new FileOutputStream(file);
try
{
FileChannel out = outStream.getChannel();
...Do something with out...
}
finally
{
outStream.close();
}
предупреждения уже нет, но теперь я не уверен, если близкий метод FileChannel должен быть вызван. Так, может быть, он должен выглядеть следующим образом:
FileOutputStream outStream = new FileOutputStream(file);
try
{
FileChannel out = outStream.getChannel();
try
{
...Do something with out...
}
finally
{
out.close();
}
}
finally
{
outStream.close();
}
При использовании входного канала файла и выходной канала файла, то это приводит к четырем вложенным попробовать ... наконец блоки, и все это получает вид раздутые.
Как вы думаете? Действительно ли необходимо закрыть канал И поток? Или закрывает поток достаточно?