問題

如何在Java中將位元組大小轉換為人類可讀格式?像1024應該成為“1 Kb”和1024 * 1024應該成為“1 Mb”.

我很難為每個專案編寫這個實用程式方法. Apache Commons中是否有任何靜態方法?

  最佳答案

這是我的轉向(沒有迴圈並處理SI單元和二進位制單元):

 public static String humanReadableByteCount(long bytes, boolean si) {
    int unit = si ? 1000 : 1024;
    if (bytes < unit) return bytes + " B";
    int exp = (int) (Math.log(bytes) / Math.log(unit));
    String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i");
    return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
}
 

示例輸出:

                               SI     BINARY

                   0:        0 B        0 B
                  27:       27 B       27 B
                 999:      999 B      999 B
                1000:     1.0 kB     1000 B
                1023:     1.0 kB     1023 B
                1024:     1.0 kB    1.0 KiB
                1728:     1.7 kB    1.7 KiB
              110592:   110.6 kB  108.0 KiB
             7077888:     7.1 MB    6.8 MiB
           452984832:   453.0 MB  432.0 MiB
         28991029248:    29.0 GB   27.0 GiB
       1855425871872:     1.9 TB    1.7 TiB
 9223372036854775807:     9.2 EB    8.0 EiB   (Long.MAX_VALUE)
 

相關文章: Java:將位元組大小格式化為人類可讀格式

  相同標籤的其他問題

javaandroidformattingapache-commons