3
嗨我正在下載工具,我發現下載速度太低。我檢查了下載速度看起來很慢。我的代碼如下,使用java優化下載速度
float fileSize = Float.parseFloat(uc.getHeaderField("Content-Length"));
in = new BufferedInputStream(uc.getInputStream());
System.out.println("File size : " + fileSize);
fout = new FileOutputStream(settingsForm.downloadDirectoryText.getText() + File.separatorChar + fileName);
int BUFFER_SIZE = 10240;
byte data[] = new byte[BUFFER_SIZE];
int count = 0;
int totalDownloaded = 0;
long downloadStartTime = System.currentTimeMillis();
long remainingTime = 0;
while ((count = in.read(data, 0, BUFFER_SIZE)) != -1) {
totalDownloaded += count;
long elapsedTime = System.currentTimeMillis() - downloadStartTime;
float speedInBytes = 1000f * totalDownloaded/elapsedTime;
float tmpSpeed = speedInBytes;
if (tmpSpeed > 1024) {
tmpSpeed = tmpSpeed/1024;
}
if (tmpSpeed > 1024 * 1024) {
tmpSpeed = tmpSpeed/(1024 * 1024);
}
System.out.println("Speed : " + tmpSpeed);
System.out.println("Remaining Time : " + (fileSize - totalDownloaded)/speedInBytes + " seconds");
int downloadPercentage = (int) ((totalDownloaded/fileSize) * 100);
fout.write(data, 0, count);
}
我發現下載需要90秒,平均下載速度爲60-70kbps。
我給出了一個Free Download Manager的下載鏈接,它將在10秒內下載同一個文件。它可以下載同樣的文件,下載速度可達400kpbs。
爲什麼我不能用很快的速度下載?
我的代碼有什麼問題嗎?
在此先感謝。
FDM使用許多連接,每個連接都下載文件的一部分。你可以嘗試去實現它。 – jlordo 2013-04-24 07:31:08
你可以嘗試減少寫到輸出流的數量嗎?不要使用fout.write(data,0,count);在每個循環迭代中。說10次迭代後,使用更大的緩衝區並寫入一次。 – Lokesh 2013-04-24 07:34:57