Sonarqube - проблема с производительностью, поскольку метод использует конструктор FileInputStream, каковы лучшие альтернативы?

Вот мой код:

        KeyStore truststore = KeyStore.getInstance("JKS");
        truststore.load(new FileInputStream(TRUSTSTORE_FILE), 
                                           TRUSTSTORE_PASSWORD.toCharArray()); //sonarqube issue

Какой InputStream наиболее подходит для этого?

Вот полная ошибка:

This method creates and uses a java.io.FileInputStream or java.io.FileOutputStream object. Unfortunately both of these classes implement a finalize method, which means that objects created will likely hang around until a full garbage collection occurs, which will leave excessive garbage on the heap for longer, and potentially much longer than expected.

Мне действительно нужно переключиться на:

InputStream is = java.nio.file.Files.newInputStream(myfile.toPath());

Мне не комфортно с этим.


person GKr297    schedule 05.10.2020    source источник
comment
Не могли бы вы подробно рассказать о полученном выпуске Sonarqube?   -  person EnzoMolion    schedule 05.10.2020
comment
Заверните его в BufferedInputStream.   -  person M. Deinum    schedule 05.10.2020
comment
Оберните его в try-with-resources, чтобы он был закрыт в конце блока. Сообщение об ошибке жалуется, что файл может быть открыт долгое время.   -  person Christoffer Hammarström    schedule 05.10.2020
comment
@ChristofferHammarström Я прочитал ваш комментарий немного поздно, можете ли вы дать его в качестве ответа; Вы можете скопировать мой.   -  person Joop Eggen    schedule 05.10.2020


Ответы (1)


Оберните его в try-with-resources, чтобы он был закрыт в конце блока. Сообщение об ошибке жалуется, что файл может быть открыт долгое время.

try (InputStream in = new FileInputStream(TRUSTSTORE_FILE)) {
    KeyStore truststore = KeyStore.getInstance("JKS");
    truststore.load(in, TRUSTSTORE_PASSWORD.toCharArray());
} // Automatically closes in.

Это освобождает системные ресурсы (дескриптор файла) и позволяет другим перезаписывать файл хранилища доверенных сертификатов.

person Christoffer Hammarström    schedule 05.10.2020
comment
Спасибо за предложение, но оно не решает мою проблему. Я обновил полную ошибку - person GKr297; 08.10.2020
comment
Ах, это очень плохо. Я бы не согласился с ошибкой SonarQube, если вы позаботитесь о закрытии InputStream таким образом. К сожалению, я не знаю другого решения, кроме Files.newInputStream. - person Christoffer Hammarström; 09.10.2020
comment
Я нашел этот ответ, который может быть связан. В нем говорится о настройке SonarQube, чтобы он знал об операторе try-with-resources. - person Christoffer Hammarström; 09.10.2020