如何在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