我对使用Java InputStreams时close()方法的用法有一些疑问。从大多数开发人员的经验来看,当不再需要InputStream时,应该始终在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.
}
}
哪种方法更好和/或更有效?还是真的重要吗?