为什么这样写会出现OutOfMemory错误,而第二段那样写就不会?URL url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();BufferedReader buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));line = buffer.readLine();while(line != null){sb.append(line);}URL url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();BufferedReader buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));while ((line = buffer.readLine()) != null) {sb.append(line);}
1 回答

jeck猫
TA贡献1909条经验 获得超7个赞
第一段:
line = buffer.readLine();
while (line != null){
sb.append(line);
}
line 的值始终不变,这是一个死循环,所以 sb 会越来越大。
第二段:
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
line 的值会不断改变,最后读到流的末尾,readLine() 会返回 null ,于是循环结束。
while 小括号里面的代码是每次都要执行的,而 line = buffer.readLine() 这个是个赋值语句。我觉得你是不是不理解为什么每次 buffer.readLine() 会返回不同的值...建议用一下 IDE(如 eclipse)的单步调试功能,观察一下 line 这个变量是如何改变的,你就会搞清楚的。
添加回答
举报
0/150
提交
取消