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

如何在Java中将字节大小转换成可读格式?

史英睿
2023-03-14
问题内容

如何在Java中将字节大小转换为人类可读的格式?像1024应该变成“ 1 Kb”,而1024 * 1024应该变成“ 1 Mb”。

我有点讨厌为每个项目编写此实用程序方法。Apache Commons中是否为此有任何静态方法?


问题答案:

SI(1 k = 1,000)

public static String humanReadableByteCountSI(long bytes) {
    String s = bytes < 0 ? "-" : "";
    long b = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
    return b < 1000L ? bytes + " B"
            : b < 999_950L ? String.format("%s%.1f kB", s, b / 1e3)
            : (b /= 1000) < 999_950L ? String.format("%s%.1f MB", s, b / 1e3)
            : (b /= 1000) < 999_950L ? String.format("%s%.1f GB", s, b / 1e3)
            : (b /= 1000) < 999_950L ? String.format("%s%.1f TB", s, b / 1e3)
            : (b /= 1000) < 999_950L ? String.format("%s%.1f PB", s, b / 1e3)
            : String.format("%s%.1f EB", s, b / 1e6);
}

二进制(1 K = 1,024)

public static String humanReadableByteCountBin(long bytes) {
    long b = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
    return b < 1024L ? bytes + " B"
            : b <= 0xfffccccccccccccL >> 40 ? String.format("%.1f KiB", bytes / 0x1p10)
            : b <= 0xfffccccccccccccL >> 30 ? String.format("%.1f MiB", bytes / 0x1p20)
            : b <= 0xfffccccccccccccL >> 20 ? String.format("%.1f GiB", bytes / 0x1p30)
            : b <= 0xfffccccccccccccL >> 10 ? String.format("%.1f TiB", bytes / 0x1p40)
            : b <= 0xfffccccccccccccL ? String.format("%.1f PiB", (bytes >> 10) / 0x1p40)
            : String.format("%.1f EiB", (bytes >> 20) / 0x1p40);

}

输出示例:

                              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中有一个静态方法吗? 问题答案: 有趣的事实:此处发布的原始代码段是有史以来复制最多的Java代码段,并且存在缺陷。它是固定的,但变得混乱。 本文全文:有史以来复制最多的Stack O

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

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

  • 问题内容: 我知道Java不允许无符号类型,所以我想知道它如何将整数转换为字节。假设我有一个值为255的整数a,并且将该整数转换为一个字节。该值表示在字节11111111中吗?换句话说,该值是否更多地视为带符号的8位整数,还是仅直接复制该整数的后8位? 问题答案: 这称为缩小原始转换。根据规格: 将有符号整数缩小为整数类型 T会 简单地丢弃除 n个 最低阶位以外的所有位,其中 n 是用于表示类型

  • 问题内容: 如何将转换为而不进行转换? 我试过了: 但是doc文件与字节不同(字节是 二进制信息 )。例如: 并且是不同的。 PS:UTF-8不起作用,因为它会将一些字节转换为不同的值。我测试了,它不起作用。 PS2:不,我不要。 问题答案: 您需要指定所需的编码,例如UTF-8 并且将是相同的。 要解码,您需要知道使用了哪种编码,以确保可以正确解码。

  • 问题内容: 我正在尝试将一个转换成三个表示那个(大端)。 我敢肯定,这与位和移位有关。但是我不知道如何去做。 例如: *注意,我知道一个int是4个字节,三个字节有上溢/下溢的机会。 问题答案: 要获取最低有效字节: 第二个最低有效字节: 和第三个最低有效字节: 说明: 将值与0xFF(二进制为11111111)按位与将返回该数字中的最低有效8位(位0至7)。将数字右移8次会将第8至15位置于第0