Сама ОС может закрыть потоки и освободить ресурсы, потому что процесс (а именно JVM) завершается, но это не обязано это делать.
Вы всегда должны реализовыватьfinally
блок, где вы закрываете его в таких случаях, например, таких как:
InputStream is = null;
try {
is = new FileInputStream(new File("lolwtf"));
//read stuff here
} catch (IOException e) {
System.out.println("omfg, it didn't work");
} finally {
is.close();
}
Это не гарантированно сработает, если он бросил в первую очередь, но вы, вероятно, захотите закончить вэта точка зрения в любом случае, так как ваш источник данных, возможно, каким-то образом испорчен.Вы можете узнать больше информации об этом, если будете держать провайдера InputStream
рядом, например, если бы я сохранил ссылку на объект File
в моем примере, я мог бы проверить, существует ли он и т. Д. Через File
'с интерфейсом, но это зависит от вашего конкретного поставщика данных.
Эта тактика становится более полезной с сетевыми сеансами, например, с Hibernate ...