【问题标题】:Measuring download speed when using HttpURLConnection Java使用 HttpURLConnection Java 时测量下载速度
【发布时间】:2018-11-08 06:37:36
【问题描述】:

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

 }

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

提前致谢。

【问题讨论】:

  • 您可能希望在更长的时间内平均计算,而不是每次stream.read() 调用。

标签: java swing httpurlconnection download-speed


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2019-07-07
    • 2014-01-15
    • 2016-04-20
    • 2011-03-27
    相关资源
    最近更新 更多