Я знаю, что есть пара аналогично названных вопросов, но большинство из них просто забыли поставить директиву 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();
}
}
Что здесь происходит?