我正在使用安卓应用下载文件。我使用了本地网络连接,但是下载速度非常慢。
以下是我使用的代码:
URL url = new URL(ep.getFileURL());
File destFile = new File(<path to sd card file>);
URLConnection uCon = url.openConnection();
InputStream is = uCon.getInputStream();
OutputStream os = new FileOutputStream(destFile);
int progress = 0;
int lastProgress = 0;
int totalSize = uCon.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[4096];
int count = -1;
while((count = is.read(buffer)) != -1)
{
os.write(buffer, 0, count);
downloadedSize = downloadedSize + count;
progress = (int)(downloadedSize * 100.0 / totalSize);
if(progress - lastProgress >= 5) {
publishProgress(progress);
lastProgress = progress;
}
}
os.close();
你有看到任何问题吗?谢谢。
编辑:
我使用了你的建议测试了我的代码,得到了以下结果:
# 下载时间测试 #
未使用缓冲输出 下载文件:1毫秒,开始下载 下载文件:179812毫秒,完成下载54687744字节 下载文件:结束,179813毫秒
使用缓冲输出 下载文件:1毫秒,开始下载 下载文件:178312毫秒,完成下载54687744字节 下载文件:结束,178313毫秒
使用httpclient 下载文件:开始 下载文件:1毫秒,开始下载 下载文件:178241毫秒,完成下载54687744字节 下载文件:结束,178242毫秒
因此,使用缓冲流或直接使用HttpClient并没有改变什么...
我还应该提到,我的代码在AsyncTask中,所以publishProgress()实际上已经在一个单独的线程上运行了...
谢谢你的帮助。