这几乎是我的代码。 (无read
或close
呼叫)。我是否需要关闭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"));
}
否,在这种情况下,在执行流管线操作时,流不会自动关闭,实际上,正如[C0]中所述,
简而言之,the documentation(C0)不负责处理已作为资源处理传递的流(Stream
)。因此,在这种情况下,确保自动关闭流的首选方法是使用try-with-resource
方法,如下所示:java-stream