Java 不关闭InputStream时是否存在内存泄漏?
我的代码块如下所示:Java 不关闭InputStream时是否存在内存泄漏?,java,Java,我的代码块如下所示: URL url = new URL("http://abc.com"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()); StringBuilder sb = new StringBuilder(); Strin
URL url = new URL("http://abc.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream());
StringBuilder sb = new StringBuilder();
String str = null;
while (null != (str = reader.readLine())) {
sb = sb.append(str);
}
resStr = sb.toString();
reader.close();
con.disconnect();
在上面的代码块中,有两个输入流没有关闭
第一个是newInputStreamReader()
,第二个是con.getInputStream()
。我有两个新的输入,但我没有关闭它们。出于这个原因,可能是内存泄漏
注意:我使用jdk1.7.0_21来总结这些评论:您没有内存泄漏,因为关闭读取器也将关闭底层流 当您使用Java7时,您可以使用try with resource的魔力
URL url = new URL("http://abc.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));)
{
StringBuilder sb = new StringBuilder();
String str = null;
while (null != (str = reader.readLine()))
sb = sb.append(str);
resStr = sb.toString();
}
con.disconnect();
由于您已经关闭了
阅读器
,因此包装的流将自动关闭。谢谢@DanielRenshaw。我清楚地理解这一点。因为您使用的是Java 7,所以应该使用构造来确保您的阅读器
对象是关闭的。当前,如果发生异常,读卡器
将不会关闭。也就是说,try(BufferedReader=newbuff…{//reading code}