我想在 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/