我知道有几个类似标题的问题,但他们中的大多数人只是忘记close()
在他们的信息流中放置指令。这里不同。
假设我有以下最小示例:
public void test() throws IOException
{
InputStream in;
if( file.exists() )
{
in = new FileInputStream( file );
}
else
{
in = new URL( "some url" ).openStream();
}
in.close();
}
这在 Eclipse (Juno SR1) 中给了我一个Resource leak: 'in' is never closed
警告。但是当我将in.close()
移入条件块时,警告消失了:
public void test() throws IOException
{
InputStream in;
if( file.exists() )
{
in = new GZIPInputStream( new FileInputStream( file ) );
in.close();
}
else
{
in = new URL( "some URL" ).openStream();
}
}
这里发生了什么?