将byte []转换为float []

时间:2013-09-04 16:04:06

标签: android floatbuffer

我正在尝试将float []转换为Android中的byte []。我已经查看了stackoverflow上的其他问题和答案,但没有一个帮助,所以我决定实现自己的解决方案。我尝试的方式是:

byte[] data = some data;
ByteBuffer buffer = ByteBuffer.allocate(data.length);
buffer.put(data);
FloatBuffer fBuffer = buffer.asFloatBuffer();
float[] dataConverted = fBuffer.array();

然而,例外:

java.lang.UnsupportedOperationException
    at java.nio.ByteBufferAsFloatBuffer.protectedArray(ByteBufferAsFloatBuffer.java:128)
    at java.nio.FloatBuffer.array(FloatBuffer.java:101)

从行:

    float[] dataConverted = fBuffer.array();

继续被抛出,我不知道为什么。有人可以帮助解释为什么抛出这个异常;这会有很大的帮助吗?

1 个答案:

答案 0 :(得分:4)

分配的FloatBuffer没有要返回的后备数组;请参阅FloatBuffer.hasArray()。要达到您想要的效果,请尝试通过FloatBuffer.get(float[])

将FloatBuffer复制到浮点数组

示例代码:

final byte[] data = new byte[] {
        64, 73, 15, -48, 127, 127, -1, -1, 0, 0, 0, 1, 0, 0, 0, 0
};

final FloatBuffer fb = ByteBuffer.wrap(data).asFloatBuffer();
final float[] dst = new float[fb.capacity()];
fb.get(dst); // Copy the contents of the FloatBuffer into dst

for (int i = 0; i < dst.length; i++) {
    System.out.print(dst[i]);
    if (i == dst.length - 1) {
        System.out.println();
    } else {
        System.out.print(", ");
    }
}

输出:

3.14159, 3.4028235E38, 1.4E-45, 0.0