java - 如何在java中不使用ByteBuffer将字节数组转换为 double

标签 java android arrays 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

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

最佳答案

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);

关于java - 如何在java中不使用ByteBuffer将字节数组转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009472/

相关文章:

java - 静态变量不会修改java android

java - 在 Kotlin 中设置匿名接口(interface)

c++ - 如何用不同的值填充数组

arrays - Ruby 减去两个字符串数组

java - 如何使用正则表达式提取 4 位数字

java - SecureRandom 应该用作单例还是每次生成随机数时都应该创建一个新对象?

java - CDH4 在不同的目录中寻找 java

java - 无法使用 Hibernate 检索 Oracle 中最后插入的行的 id

android - 如何在 android studio 中为 multiResolution 定义维度

php - 在 PHP 中将数字文字与数组一起使用 (preg_replace)