3

次のように FileInputStream を使用して KeyStore を読み取る場合、入力ストリームを明示的に閉じて、システム リソースの浪費を防ぐ必要がありますか?

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ドキュメントにあるチェックアウトの例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 に答える