如何在仍然下载文件的同时显示每秒传输速率

时间:2014-06-24 03:17:27

标签: java

我需要提供一个显示每秒大小传输速率的功能。

我必须使用我的java代码从网上下载文件,并在下载文件时显示每秒的传输速率。

enter image description here

请注意下面的代码不完全是我的,它来自here 下面的代码只能在下载完成后计算传输速率,但我目前不知道如何使代码每秒显示传输速率,任何概念构思或代码建议吗?

public static void main(String argc[]) throws Exception {

long totalDownload       = 0;                      // total bytes downloaded
final int BUFFER_SIZE    = 1024;                   // size of the buffer

byte[] data = new byte[BUFFER_SIZE];               // buffer
BufferedInputStream in = new BufferedInputStream(

    new URL(
            "http://ipv4.download.thinkbroadband.com:8080/5MB.zip")
            .openStream());

 int dataRead        = 0;                          // data read in each try
 long startTime      = System.nanoTime();          // starting time of download
 while ((dataRead    = in.read(data, 0, 1024)) > 0) {
    totalDownload  += dataRead;                    // adding data downloaded to total data
    System.out.println(totalDownload);
}

/* download rate in bytes per second */
float bytesPerSec = totalDownload
    / ((System.nanoTime() - startTime) / 1000000000);
System.out.println(bytesPerSec + " Bps");

/* download rate in kilobytes per second */
float kbPerSec = bytesPerSec / (1024);
System.out.println(kbPerSec + " KBps ");

/* download rate in megabytes per second */
float mbPerSec = kbPerSec / (1024);
System.out.println(mbPerSec + " MBps ");
}

1 个答案:

答案 0 :(得分:1)

蒂洛

"你有这个循环,一次下载1024个字节。您可以在同一循环中更新一些统计信息(及其显示)。也许不是在每一次迭代中,而是每一次。除非下载完全挂起,否则将为您提供定期更新。如果它挂起,您需要第二个线程来轮询统计信息"