2011-11-16 43 views
0

期間的帶寬速度的用戶友好的格式化輸出要下載的過程中表現出對於帶寬速度很好地格式化輸出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選擇 千字節/秒,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

有一個FileUtils.byteCountToDisplaySize()方法Apache Commons IO

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

// your current speed is 12 KB/s 

另見(可能重複):

+0

grate im使用[Mr Ed](http://stackoverflow.com/questions/3263892/format-file-size-as-mb-gb-etc)回答你的鏈接,謝謝。唯一的問題是我的代碼給我像0.5683736337 MByte/s雙打,我需要將其轉換爲很長時間,因爲@Mr Ed方法需要很長的值。是0.5683736337是否與5683736337 MBytes? – Erik

+2

只需跳過「'/ BYTES_PER_MIB'」部分即可獲得字節而不是MiB。 –

+0

現在正在工作,這太酷了 – Erik

1

我真的不完全明白你想要它是什麼困惑,你必須兆字節**在你的交換機。

正如你似乎知道一個switch語句需要一個枚舉或一個int - 並且你當前的數字既不是。

如果你想自動從Kbit/s移動到Mbit/s隨着數量變大,那麼我認爲你想使用帶有閾值的if語句。

如果您想將用戶設置爲首選項的設置,那麼您只需將該設置(enum或int)傳遞給此函數,以便它可以以所需格式處理答案。

如果你不想做這些事情,那麼我覺得你的問題有點混亂。

+0

更新我的問題,是的if語句我更好,我看到了。但是,如果聲明有什麼價值?我想我可能會設置錯誤的值,並顯示Mbit,因爲我在檢查輸出正確性時遇到問題。 – Erik