Закрытие Java InputStreams

У меня есть несколько вопросов об использовании метода close () при использовании Java InputStreams. Из того, что я вижу и читаю от большинства разработчиков, вы всегда должны явно вызывать close () для InputStream, когда он больше не нужен. Но сегодня я искал возможность использовать файл свойств Java, и в каждом найденном мной примере есть что-то вроде этого:

Properties props = new Properties();
try {
    props.load(new FileInputStream("message.properties"));
    //omitted.
} catch (Exception ex) {}

В приведенном выше примере нет способа явно вызвать close (), потому что InputStream недоступен после того, как он используемый. Я видел много подобных случаев использования InputStreams, хотя это, кажется, противоречит тому, что большинство людей говорят о явном закрытии. Я прочитал Oracle JavaDocs, и там не упоминается, закрывает ли метод Properties.load () InputStream. Мне интересно, приемлемо ли это в целом или лучше сделать что-то вроде следующего:

Properties props = new Properties();
InputStream fis = new FileInputStream("message.properties");
try {
    props.load(fis);
    //omitted.
} catch (Exception ex) {
    //omitted.
} finally {
    try {
        fis.close();
    } catch (IOException ioex) {
        //omitted.
    }
}

Какой способ лучше и / или эффективнее? Или это действительно важно?

65
задан ROMANIA_engineer 26 September 2017 в 03:04
поделиться