1

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

ただし、例外:

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

行から:

    float[] dataConverted = fBuffer.array();

投げられ続けますが、その理由はわかりません。この例外がスローされる理由を誰かが説明してくれませんか。それは大いに役立つでしょうか?

4

1 に答える 1

5

割り当てられた FloatBuffer には、返すバッキング配列がありません。FloatBuffer.hasArray()を参照してください。希望する効果を得るには、FloatBuffer.get(float[])を介して FloatBuffer を float 配列にコピーしてみてください。

サンプルコード:

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
于 2013-09-04T16:36:55.250 に答える