3

如下使用 FileInputStream 读取 KeyStore 时,是否需要显式关闭 input-steam 以停止浪费系统资源?

FileInputStream fin = new FileInputStream("keystore.jks");
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(fin, password);

//  Is this line needed ??
fin.close();

这个 FileInputStream 是由 load() 方法自动关闭还是需要显式手动干预?

4

3 回答 3

5

这个 FileInputStream 是由 load() 方法自动关闭还是需要显式手动干预?

是的,它需要关闭以克服不必要的泄漏。

http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html的 java doc 中给出的结帐示例KeyStore

于 2014-05-27T14:05:48.410 回答
2

是的,试试这个测试

    FileInputStream fin = new FileInputStream("keystore.jks") {
        public void close() throws java.io.IOException {
            System.out.println("close");
        }
    };
    KeyStore keystore = KeyStore.getInstance("JKS");
    keystore.load(fin, "changeit".toCharArray());

你会看到 close() 没有被调用

于 2014-05-27T14:08:57.887 回答
0

在处理不确定的流和 API 时,您应该明确地使用org.apache.commons.io.IOUtils.closequietly

于 2014-05-27T14:09:46.213 回答