Я только что открыл какой-то старый код в текущей версии Eclipe Juno Release Candidate и заметил новое блестящее предупреждение: Утечка ресурсов. Это было вызвано таким кодом:
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();
}
При использовании канала ввода файла и канала вывода файла это приводит к четырем вложенным блокам try...finally, и все это становится раздутым.
Что вы думаете? Действительно ли необходимо закрыть канал И поток? Или достаточно закрыть поток?