关闭 Java InputStreams
2022-08-31 12:50:34
我对使用Java InputStreams时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.
}
}
哪种方式更好和/或更有效?还是真的重要?