如果我在 Java 中使用带 BufferedReader 的流式传输,是否存在任何资源泄漏

Is there any resource leak if I use streaming with BufferedReader in Java

我有很多代码。 (没有 readclose 调用)。我是否需要关闭 InputStream 或 BufferedReader?这里有代码味道/资源泄漏吗?

InputStream stream = response.getEntity().getContent();
String response = new BufferedReader(new InputStreamReader(stream)).lines()
                .collect(Collectors.joining("\n"));

编辑

根据答案,这是正确的吗

InputStream stream = response.getEntity().getContent();
String response;
try (BufferedReader br = new BufferedReader(new InputStreamReader(responseStream))) {
                    response = br.lines().collect(Collectors.joining("\n"));
                }

不,在这种情况下,流不会在执行流管道操作时自动关闭,事实上,如 the documentation 中所述,也 无法保证 reader将位于读取下一个字符或行的特定位置。

简而言之Streams () are not responsible for manipulating the stream () 已作为资源传递处理。因此,在这种情况下确保自动关闭流的首选方法是使用 try-with-resource 方法,如下所示:

try (InputStream stream = request.getEntity().getContent();
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream))) {
    String response = bufferedReader.lines().collect(Collectors.joining("\n"));
}