如果我在 Java 中使用带有缓冲阅读器的流式处理,是否有任何资源泄漏



这几乎是我拥有的代码。(没有readclose电话(。我是否需要关闭输入流或缓冲读取器?这里有代码异味/资源泄漏吗?

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"));
}

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

简而言之,Streams(java-stream(不负责操作已作为资源传递进行处理的流(stream(。因此,在这种情况下确保自动关闭流的首选方法是使用资源尝试方法,如下所示:

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

最新更新