同様の資格のある質問がいくつかあることは知っていますが、それらのほとんどはclose()
、ストリームにディレクティブを配置することを単に忘れています。これはここでは違います。
次の最小限の例があるとしましょう。
public void test() throws IOException
{
InputStream in;
if( file.exists() )
{
in = new FileInputStream( file );
}
else
{
in = new URL( "some url" ).openStream();
}
in.close();
}
これによりResource leak: 'in' is never closed
、Eclipse(Juno SR1)で警告が表示されます。しかし、を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();
}
}
ここで何が起こっているのですか?