Spring boot: я должен закрыть http-клиент body stream - PullRequest
2 голосов
/ 20 января 2020

Я кодировал этот фрагмент кода:

ReferenceComposition reference = this.restTemplate.execute(uriToCall, HttpMethod.GET, null, clientHttpResponse ->
        this.extractReferenceFromResponse(
            this.getReferenceHeader(clientHttpResponse),
            this.getReferenceStream(clientHttpResponse.getBody())
        )
    );

Должен ли я закрыть InputStream, возвращаемый clientHttpResponse.getBody() после вызова this.extractReferenceFromResponse(..)? getReferenceStream используйте только InputStream для создания временного файла.

getReferenceStream is:

/**
 * Creates a temporarily file.
 * @param referenceStream response stream
 * @return Temp created file
 */
private InputStream getReferenceStream(InputStream referenceStream) {
    try {
        File tmpReferenceFile = File.createTempFile("reference", "tmp");
        OutputStream contentOutputStream = new FileOutputStream(tmpReferenceFile);
        StreamUtils.copy(referenceStream, contentOutputStream);
        contentOutputStream.close();

        InputStream referenceContentStream = FileUtils.openInputStream(tmpReferenceFile);

        return referenceContentStream;
    } catch (IOException e) {
        throw new ...
    }
}

Обнаружена ли любая возможная утечка памяти?

Примечание Я знаю, что возвращаю открытую InputStream referenceContentStream. Он закрывается позже, за фрагментом кода выше.

...