Java 如何在下载文件时显示每秒传输速率

Java 如何在下载文件时显示每秒传输速率,java,Java,我需要拿出一个函数来显示每秒的大小传输速率 我必须使用java代码从web下载一个文件,并在下载文件时显示每秒的传输速率 请注意下面的代码不完全是我的,它是从 下面的代码只能在下载完成后计算传输速率,但我目前不知道如何让代码每秒显示传输速率,有什么概念性的想法或代码建议吗 public static void main(String argc[]) throws Exception { long totalDownload = 0; //

我需要拿出一个函数来显示每秒的大小传输速率

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

请注意下面的代码不完全是我的,它是从 下面的代码只能在下载完成后计算传输速率,但我目前不知道如何让代码每秒显示传输速率,有什么概念性的想法或代码建议吗

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 ");
}
蒂洛


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

这与基本思想相同,但取而代之的是,您需要以常规基数采样并平均结果……您有一个一次下载1024字节的循环。您可以在同一个循环中更新一些统计信息(及其显示)。也许不是每一次迭代,而是每几次迭代。除非下载完全挂起,否则将定期更新。如果它确实挂起,您将需要第二个线程来轮询统计数据。@MadProgrammer“需要采样是一个常规的基数”,您可以详细说明一下吗。我仍然不清楚你的sggestionIt的全部归结到实现,但基本上,你会得到当前时间,允许下载运行,将你读取的字节数相加。当一段给定的时间过去后,您可以进行计算。。。