如何在不使用ByteBuffer的情况下将字节数组转换为java中的double

时间:2013-11-15 19:53:18

标签: java android bytearray bit-manipulation bytebuffer

我想将一个字节数组转换为double,并使用以下代码执行此操作 -

double fromByteArraytoDouble(byte[] bytes) {

    return ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN).getDouble();
}

此代码有效,但我在我的Android应用程序中重复迭代调用此函数。 (循环实际上是一个继续运行的后台进程。)wrap()函数假设每次调用时都会创建一个新对象,因此在几个执行周期后,android车库收集器会运行以清理内存(我从中获取了此信息) DDMS) -

 D/dalvikvm(6174): GC_FOR_ALLOC freed 2K, 5% free 12020K/12580K, paused 15ms, total 15ms

暂停代码几毫秒,这对应用来说是不可接受的。有没有办法在不使用ByteBuffer的情况下将字节数组转换为double?

1 个答案:

答案 0 :(得分:2)

long bits = 0L;
for (int i = 0; i < 8; i++) {
  bits |= (bytes[i] & 0xFFL) << (8 * i);
  // or the other way around, depending on endianness
}
return Double.longBitsToDouble(bits);