您是否需要显式关闭Java KeyStore输入流?

时间:2014-05-27 14:01:15

标签: java keystore jks

使用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()方法自动关闭还是需要显式手动干预?

3 个答案:

答案 0 :(得分:5)

  

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

是的,需要接近结束不必要的泄漏。

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

答案 1 :(得分:1)

是的,试试这个测试

    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()

答案 2 :(得分:1)

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