我对在使用Java InputStream时调用close()方法的用法有些疑问。根据我从大多数开发者那里看到和读到的内容,当不再需要InputStream时,应该始终显式地调用close()。但是,今天我正在研究使用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.
}
}
哪种方法更好和/或更有效?还是真的无关紧要吗?