我正在我的android應用程序下載。我正在使用本地網絡連接,下載速度非常慢。Android緩慢文件下載
下面是我使用他的代碼:
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();
你發現什麼問題嗎?謝謝。
編輯:
我用你的建議測試我的代碼,我得到了這些結果:
# Download times tests # Without bufferedoutput Downloading file: 1 ms, Start download Downloading file: 179812 ms, Finished downloading 54687744 bytes Downloading file: end, 179813 ms With bufferedoutput Downloading file: 1 ms, Start download Downloading file: 178312 ms, Finished downloading 54687744 bytes Downloading file: end, 178313 ms With httpclient Downloading file: begin Downloading file: 1 ms, Start download Downloading file: 178241 ms, Finished downloading 54687744 bytes Downloading file: end, 178242 ms
所以,使用緩衝流或者直接使用HttpClient的,並不能改變什麼?
我也應該提到我的代碼是在一個AsyncTask中,所以publishProgress()實際上已經在一個單獨的線程上運行了...
謝謝你的幫助。
我會把它放在一個答案中。 – 2011-01-29 04:19:19
你會得到什麼速度,以及你期望得到什麼樣的速度?如果你質疑IO的速度,你應該做的第一件事就是時間,以便你可以判斷你的改進是否會產生重大影響。 – 2011-01-29 04:23:59