栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

将字节数转换为人类可读的格式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将字节数转换为人类可读的格式

在阅读阮一峰的《科技爱好者周刊(第165期)》时,看到了一个关于将字节数转换为人类可读的格式的文章,位置在:
文章->6.复制次数最多的 StackOverflow 代码片段,这段代码的作者多年后写了这篇文章,分析自己原始代码里面的漏洞。
文章详细描述了作者看到问题,写出了原始的解决方案代码的过程,分析了原始代码里的漏洞,并在文末提供了修复bug后的版本,以及可用于生产环境的优化后版本。
stackoverflow连接:

How can I convert byte size into a human-readable format in Java?

目前作者提供的可用于生产环境的代码已经更新到stackoverflow中,可以直接在stackoverflow中复制这段代码。
作者提供的原始版本,只有在SI模式(1K=1000)下才会有问题,因此如果我们的使用场景是输出文件大小等二进制Binary模式(1 K = 1024)的话,原始版本也是可以使用的。

粘贴代码如下 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 Ki = 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());
}

输出示例:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号