想要在下载期间显示有关带宽速度的格式良好的输出
由于@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语句中添加了什么?
希望你明白我尝试做什么
答案 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)传递给此函数,以便它可以按所需格式处理答案。
如果你不想做这些事情,那么我觉得你的问题有点令人困惑。