使用HttpURLConnection Java时测量下载速度

时间:2018-05-29 14:43:57

标签: java swing httpurlconnection download-speed

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

 }

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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