我刚刚在当前的Eclipse 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();
}
如果使用文件输入通道和文件输出通道,则会导致四个嵌套的try...finally块,并且所有内容都会变得有点臃肿。
你认为呢?关闭通道和流真的有必要吗?还是仅关闭流就足够了?