所以我使用java设计下载管理器,我需要向用户显示下载速度 下面是我用来查找以KB / s为单位的下载速度的代码,但我不认为它正确地测量下载速度。它的下载速度从5 KB / s到200000 KB / s非常不准确,这很奇怪,我的实际下载速度约为500 KB / s。 MAX_BUFFER_SIZE是16384.
while (status == CURRENT) {
/* Size buffer according to how much of the
file is left to download. */
byte buffer[];
if (sizeOfFile - downloadedSize > MAX_BUFFER_SIZE) {
buffer = new byte[MAX_BUFFER_SIZE];
} else {
buffer = new byte[sizeOfFile - downloadedSize];
}
// Read from server into buffer and measuring download speed.
Long t1 = System.nanoTime();
int read = stream.read(buffer);
Long t2 = System.nanoTime();
downloadSpeed = ((double) read / (double)(t2 - t1)) * 1000000;
System.out.println(downloadSpeed);
if (read == -1)
break;
// Write buffer to file.
file.write(buffer, 0, read);
downloadedSize += read;
publish(downloadedSize);
while (status == PAUSED) {
Thread.sleep(1);
}
}
我无法弄清楚我的方法有什么问题。
提前致谢。
答案 0 :(得分:0)
一个相当不错的选择是在一定数量的while循环后计算下载速度。例如,在我的程序案例中,30个while循环下载速度使用公式(大小(字节)/时间(ns)* 10 ^ 6)以KB / s显示给用户。