更新时间:2022-10-26 22:47:20
和二进制单元):
public static String humanReadableByteCount(long bytes,boolean si){
int unit = 1000:1024;
if(bytes 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);
$ b示例输出:
$ b 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)
How to convert byte size into human-readable format in Java? Like 1024 should become "1 Kb" and 1024*1024 should become "1 Mb".
I am kind of sick of writing this utility method for each project. Are there any static methods in Apache Commons for this?
Here is my go at it (no loops and handles both SI units and binary units):
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);
}
Example output:
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)
Related article: Java: Formatting byte size to human readable format