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}