【问题标题】:Do you need to explicity close a Java KeyStore input stream?您是否需要显式关闭 Java KeyStore 输入流?
【发布时间】:2014-07-16 11:49:34
【问题描述】:

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

【问题讨论】:

  • 如果你创建了流,你有责任关闭它。

标签: java keystore jks


【解决方案1】:

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

是的,它需要关闭以消除不必要的泄漏。

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

【讨论】:

    【解决方案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() 没有被调用

    【讨论】:

    • 很好的例子,可惜我只能选择一个正确的答案。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多