Нужно ли явно закрывать входной поток после чтения ClassLoader.getSystemResourceAsStream? - PullRequest
2 голосов
/ 27 февраля 2012

Вызов ClassLoader.getSystemResourceAsStream открывает входной поток для базового ресурса, который в конечном итоге преобразуется в свойства:

Properties build = new Properties();
build.load(ClassLoader.getSystemResourceAsStream(ANT_BUILD));

Нужно ли явно закрывать поток после загрузки свойств?

Быстро взглянул на java.util.Properties и он не закрыл поток!

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Указанный поток остается открытым после возврата метода load, поэтому вы обязаны закрыть поток.Вам необходимо явно закрыть поток.

1 голос
/ 27 февраля 2012

По умолчанию ClassLoader.getSystemResourceAsStream(String) возвращает FileInputStream, обернутый в BufferedInputStream.

Если вы посмотрите на FileInputStream source , вы увидите, что у него есть finalize метод, который закрываетstream для вас.

Но, конечно, не стоит ждать, пока куча не увеличится, пока сборщик мусора не начнет заботиться о ваших потоках, и вы всегда должны пытаться закрыть потоки самостоятельно.

...