Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do you need to explicity close a Java KeyStore input stream?

Tags:

java

keystore

jks

When reading in a KeyStore using a FileInputStream as follows, does one need to explicitly close the input-steam to stop system resources being wasted ?

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

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

Is this FileInputStream closed automatically by the load() method or is explicit manually intervention required?


2 Answers

Is this FileInputStream closed automatically by the load() method or is explicit manually intervention required?

yes it required to close to over come unnecessary leaks.

Checkout example given in java doc of KeyStore http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html

like image 91
dharam Avatar answered Sep 16 '25 00:09

dharam


Yes, try this test

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

and you will see that close() is not called

like image 40
Evgeniy Dorofeev Avatar answered Sep 15 '25 23:09

Evgeniy Dorofeev