【发布时间】:2015-01-20 16:47:35
【问题描述】:
我正在尝试从 HttpURLConnection 的输入流中读取数据:
InputStream input = conn.getInputStream();
InputStreamReader isr = new InputStreamReader((input));
BufferedReader br = new BufferedReader(isr);
StringBuilder out = new StringBuilder("");
String output;
while ((output = br.readLine()) != null) {
out.append(output);
}
当输入流包含大量数据时,这确实会花费太多时间。可以优化吗?
【问题讨论】:
-
是什么让您认为瓶颈在您的代码中,而不是数据通过网络到达所花费的时间?
-
您可以为
BufferedReader使用更大/更小的缓冲区大小进行测试。否则您会受到网络的限制。 -
“太多”实际上是否比使用其他方式(ftp、浏览器、wget 等)下载资源时更多?衡量,不要猜测。你期望多少 KB/s,你得到多少?请注意,构建巨大的 StringBuilders 可能需要很多时间。如果全部在内存中,就会有大量的数组复制和内存分配。
-
@laune:我觉得应该不会比网络慢...
-
@biziclop 我实际上已经看到了双重/复制来减慢速度。检查是一回事 - 因此评论不是答案;-)
标签: java performance inputstream