如果我在Java中使用BufferedReader流媒体,是否存在资源泄漏
这几乎就是我的代码。(无如果我在Java中使用BufferedReader流媒体,是否存在资源泄漏,java,stream,inputstream,bufferedreader,java-stream,Java,Stream,Inputstream,Bufferedreader,Java Stream,这几乎就是我的代码。(无读取或关闭调用)。我需要关闭InputStream或BufferedReader吗?这里是否存在代码气味/资源泄漏 InputStream stream = response.getEntity().getContent(); String response = new BufferedReader(new InputStreamReader(stream)).lines() .collect(Collectors.joining("\n"
读取
或关闭
调用)。我需要关闭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"));
}
不,在这种情况下,流在执行流管道操作时不会自动关闭,事实上,如中所述,也不能保证读取器将位于读取下一个字符或行的特定位置 简而言之,
Stream
s()不负责处理作为资源传递的流()。因此,在这种情况下,确保自动关闭流的首选方法是使用try with resource方法,如下所示:
try (InputStream stream = request.getEntity().getContent();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream))) {
String response = bufferedReader.lines().collect(Collectors.joining("\n"));
}
在Java7或更新版本中,请尝试自动关闭Closables。这会在将来的某个时候帮你省掉头发撕裂的麻烦。是的,先生。我知道自动可关闭。但是,我是否需要一个基于您建议的编辑流程,因为我将在try块之外使用
response
。@头脑风暴您可以在try{}
块之前初始化response
。在变量分配方面没有资源泄漏。相反,您是否明确希望将InputStream
也保留在try之外?不确定其他用法,但您也可以使用try(BufferedReader BufferedReader=new BufferedReader(new InputStreamReader(request.getEntity().getContent())))…
,并使用读取器查找响应。