java - 将 long 转换为 "byte-array-ed"文本,无需堆分配

标签 java arrays string garbage-collection long-integer

我想在 Java 中将(正)原语 long 转换为文本形式的 byte[]

例如,一个简单的方法是:123 => "123"=> [49, 50, 51]

然而,将 long 转换为 String 会在堆上分配一个 String,我正试图为我的无 GC 库避免这种情况。我宁愿直接在预先分配的字节数组上呈现它。

因此,我的问题是如何直接从 long 转到 byte[] 表示,如果我使用 String 构造函数调用它(对于上面的示例)会给我“123”。澄清一下,我不打算将 long 编码为二进制形式的 byte[],而是文本形式。

谢谢! N

最佳答案

这个简单的程序:

long l = 123;
int size = (int)(Math.log10(l)+1);
byte[] array = new byte[size];
for (int i = 0; i < size; i++) {
    long temp = (long) Math.pow(10, size - i - 1);
    array[i] = (byte) ((l / temp) + 48);
    l = l % temp;
}
System.out.println(Arrays.toString(array)); // [49, 50, 51]

我也针对当前时间(以毫秒为单位)对其进行了测试,并且按预期工作:

long l = System.currentTimeMillis();
...
System.out.println(Arrays.toString(array));

输出:

1406485727149
[49, 52, 48, 54, 52, 56, 53, 55, 50, 55, 49, 52, 57]

关于java - 将 long 转换为 "byte-array-ed"文本,无需堆分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983983/

相关文章:

c++ - 多功能阵列最后一行结果相同

c++ - 如何通过 C++ 从数字列表中生成 3 位数字?

在c中连接字符数组(字符串)

c - 如何将以下内容转换为 char[]?

java - 基于百分比分布算法的负载均衡器

java - java中如何设置Date对象指向不同的时区

javascript - 我想知道学生数组中是否有某个名字,如果有则打印出true,如果没有则打印出false

string - 多重 split

java - 我如何从匿名类访问我的主类?

java - 使用 Byte Buddy 的 Slf4j 记录器