Wiem, że istnieje kilka podobnie uprawnionych pytań tam, ale większość z nich po prostu zapomniała umieścić dyrektywę close()
w swoim strumieniu. Tutaj jest inaczej.wyciek zasobów: "w" nigdy nie jest zamknięty, ale jest zamknięty
Powiedzmy mam następujący minimalny przykład:
public void test() throws IOException
{
InputStream in;
if(file.exists())
{
in = new FileInputStream(file);
}
else
{
in = new URL("some url").openStream();
}
in.close();
}
To daje mi Resource leak: 'in' is never closed
ostrzeżenie w Eclipse (Juno SR1). Ale kiedy przesunąć in.close()
w bloku warunkowego, ostrzeżenia znika:
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();
}
}
Co tu się dzieje?
Ostrzeżenie, gdzie. IDE? Kompilacja Java? Które IDE? Która wersja? – Gimby
* "... ostrzeżenia znikają:" *. Jakie ostrzeżenia? –
Powinieneś mieć blok try/finally. Zamknij strumień w bloku finally, aby upewnić się, że nie stracisz, jeśli zostanie zgłoszony wyjątek. – duffymo