0

所以我正在使用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);
     }

 }

我无法弄清楚我的方法有什么问题。

提前致谢。

4

1 回答 1

0

一个相当不错的选择是在一定数量的 while 循环后计算下载速度。例如,在我的程序案例中,30 次循环后的下载速度使用公式 (size(bytes) /time (ns) * 10^6) 以 KB/s 显示给用户。

于 2018-05-31T08:33:08.543 回答