java 大小序转换,如何在Java中将字节大小转换为人类可读的格式?

How can I convert byte size into a 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. Is there a static method in Apache Commons for this?

解决方案

Fun fact: The original snippet posted here was the most copied Java snippet of all time on Stack Overflow, and it was flawed. It was fixed, but it got messy.

SI (1 k = 1,000)

public static String humanReadableByteCountSI(long bytes) {

if (-1000 < bytes && bytes < 1000) {

return bytes + " B";

}

CharacterIterator ci = new StringCharacterIterator("kMGTPE");

while (bytes <= -999_950 || bytes >= 999_950) {

bytes /= 1000;

ci.next();

}

return String.format("%.1f %cB", bytes / 1000.0, ci.current());

}

Binary (1 K = 1,024)

public static String humanReadableByteCountBin(long bytes) {

long absB = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);

if (absB < 1024) {

return bytes + " B";

}

long value = absB;

CharacterIterator ci = new StringCharacterIterator("KMGTPE");

for (int i = 40; i >= 0 && absB > 0xfffccccccccccccL >> i; i -= 10) {

value >>= 10;

ci.next();

}

value *= Long.signum(bytes);

return String.format("%.1f %ciB", value / 1024.0, ci.current());

}

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值