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

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

感谢@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) } 

希望它是这样的。 我从计算中得到每秒兆字节 * 字节 ,然后我输入一个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语句中添加了什么?

希望你明白我尝试做什么

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

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

另见(可能重复):

  • 如何在java中将字节大小转换为人类可读的格式?
  • 格式化文件大小为MB,GB等

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

你似乎意识到switch语句需要有枚举或int – 并且你当前的数字都不是。

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

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

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