当前位置: 首页 > 面试题库 >

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

郑哲彦
2023-03-14
问题内容

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

像1024应该变成“ 1 Kb”,而1024 * 1024应该变成“ 1 Mb”。

我有点讨厌为每个项目编写此实用程序方法。在Apache Commons中有一个静态方法吗?


问题答案:

有趣的事实:此处发布的原始代码段是有史以来复制最多的Java代码段,并且存在缺陷。它是固定的,但变得混乱。

本文全文:有史以来复制最多的Stack Overflow片段存在缺陷!

来源:将字节大小格式化为人类可读格式 编程指南

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());
}

二进制(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());
}

输出示例:

                              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中将字节大小转换为人类可读的格式?像1024应该变成“ 1 Kb”,而1024 * 1024应该变成“ 1 Mb”。 我有点讨厌为每个项目编写此实用程序方法。Apache Commons中是否为此有任何静态方法? 问题答案: SI(1 k = 1,000) 二进制(1 K = 1,024) } 输出示例:

  • 问题内容: 我想编写一种将CamelCase转换为人类可读名称的方法。 这是测试用例: 问题答案: 这适用于你的测试用例: 这是一个测试工具: 它使用零长度匹配正则表达式以及后向和前向查找在哪里插入空格。基本上有3种模式,我习惯String.format将它们放在一起以使其更具可读性。 这三种模式是: UC behind me, UC followed by LC in front of me n

  • 问题内容: 我正在从硬件设备读取8字节的数据。我需要将它们转换为数值。我想将它们转换为适合8个字节的长度。我对Java和低级数据类型操作不是很熟悉。我似乎有两个问题(除了几乎没有有关硬件的文档的事实外),这些字节期望是无符号的,所以我无法进行直接整数转换。我不确定它们是什么字节序。 任何意见,将不胜感激。 最终结束了(摘自一个星期前我可能应该已经读过的一些源代码): 问题答案: 对于字节序,请测试

  • 问题内容: 我想在UDP协议中使用字节格式发送数据时遇到问题,问题是当我尝试使用json对象类型创建数据时,无法获取数据的字节格式,这是我的示例代码: 我知道我的问题,但我找不到如何将json对象转换为字节,有什么建议吗? 问题答案: 获取字符串的字节:

  • 是否有一个reg exp或函数可以将驼峰大小写,css和下划线转换为人类可读的格式?它目前不需要支持非人类。对不起外星人。:( 例子: hello世界-