Java BufferedReader运行极慢
我正在从web服务器下载图像,如下所示:Java BufferedReader运行极慢,java,php,android,download,bufferedreader,Java,Php,Android,Download,Bufferedreader,我正在从web服务器下载图像,如下所示: conn = url.openConnection(); conn.setDoOutput(true); wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); while ((resp = rd.readL
conn = url.openConnection();
conn.setDoOutput(true);
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((resp = rd.readLine()) != null) {
downloadedImage += resp;
}
但是它非常慢。下载一个500kb的文件大约需要15秒。有没有更好的方法下载图像
以防万一:文件格式为x行,每行80个UTF-8字符。保持线路中断并不重要
谢谢我想这里最薄弱的环节是网络/服务器,但无论如何,您可以在循环的同时提高
的性能
每次调用时,使用+=
基本上会创建一个新的StringBuilder
。因此string1+=string2
与调用string1=newstringbuilder(string1.append(string2.toString())是一样的显然,在运行x次的循环中,您永远不会这样做。因此,在开始循环之前创建一个StringBuilder
,并在完成循环后调用toString()
StringBuilder stringBuilder = new StringBuilder(downloadedImage);
while ((resp = rd.readLine()) != null) {
stringBuilder.append(resp);
}
downloadedImage = stringBuilder.toString();
如果循环不经常运行,性能改进可能不会太大,但是由于您正在下载一个映像,我想它会运行很多次 我的第一个猜测是这里最薄弱的环节是网络/服务器,而不是BufferedReader。。。我试着通过chrome下载这个文件,大约需要10秒钟。同样感谢StringBuilder提示,我不知道每次连接时都会安装一个新的@我很乐意帮忙。此外,还有一个小的“良好实践”事项:如果您还没有在问题中删去这一行,您应该在循环后关闭InputStream
。