Joh*_*ale 1 android floatbuffer
我正在尝试在 Android 中将 float[] 转换为 byte[]。我在stackoverflow上查看了其他问题和答案,但没有一个帮助,所以我决定实施我自己的解决方案。我试过的方法是:
byte[] data = some data;
ByteBuffer buffer = ByteBuffer.allocate(data.length);
buffer.put(data);
FloatBuffer fBuffer = buffer.asFloatBuffer();
float[] dataConverted = fBuffer.array();
Run Code Online (Sandbox Code Playgroud)
但是,例外:
java.lang.UnsupportedOperationException
at java.nio.ByteBufferAsFloatBuffer.protectedArray(ByteBufferAsFloatBuffer.java:128)
at java.nio.FloatBuffer.array(FloatBuffer.java:101)
Run Code Online (Sandbox Code Playgroud)
从行:
float[] dataConverted = fBuffer.array();
Run Code Online (Sandbox Code Playgroud)
一直被抛出,我不知道为什么。有人可以帮助解释为什么抛出这个异常吗?会有很大帮助吗?
小智 5
分配的 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(", ");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
3.14159, 3.4028235E38, 1.4E-45, 0.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2523 次 |
| 最近记录: |