java如何在下载过程中显示有关带宽速度的用户友好格式化输出

时间:2011-11-16 19:23:05

标签: java download bandwidth

想要在下载期间显示有关带宽速度的格式良好的输出

由于@Tomasz Nurkiewicz,我在下面有这个计算,它显示了 我下载文件时每秒超级* 字节 *。

long start = System.nanoTime();
long totalRead = 0;
final double NANOS_PER_SECOND = 1000000000.0;
final double BYTES_PER_MIB = 1024 * 1024;

    while ((val = bis.read(buffer, 0, 1024)) > 0) {
        //...
        totalRead += val;
        double speed = NANOS_PER_SECOND / BYTES_PER_MIB * totalRead / (System.nanoTime() - start + 1)
    }

希望它是这样的。我每秒得到mega * bytes * 计算并从中输入if statement进行选择 KByte / s,MBit / s(不确定)或者就像普通的FTP客户端显示速度一样。

if( KByte/s something) {
   System.out.print(your current speed xx KB/s);
}else if(MByte/s something){
   System.out.print(your current speed xx MB/s);
}

我的问题是我在if语句中添加了什么?

希望你明白我尝试做什么

2 个答案:

答案 0 :(得分:2)

FileUtils.byteCountToDisplaySize()中有一个Apache Commons IO方法:

System.out.println(
  "your current speed is " + FileUtils.byteCountToDisplaySize(12345) + "/s"
)

// your current speed is 12 KB/s

另见(可能重复):

答案 1 :(得分:1)

我真的不明白你想要什么让你感到困惑的是你的交换机每秒有超过**字节。

你似乎意识到一个switch语句需要有一个enum或一个int - 并且你当前的数字都不是。

如果您希望在数字变大时自动从Kbit / s移动到Mbit / s,那么我认为您希望使用带有阈值的if语句。

如果您想要将用户设置为首选项的设置,则只需将该设置(枚举或int)传递给此函数,以便它可以按所需格式处理答案。

如果你不想做这些事情,那么我觉得你的问题有点令人困惑。