2013-09-04 8 views
1

Android에서 float []을 byte []로 변환하려고합니다. stackoverflow에 대한 다른 질문과 대답을 살펴 봤지만 그들 중 아무도 도움을받지 못해서 내 솔루션을 구현하기로 결정했습니다.byte []를 float []로 변환

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

가 발생되는 유지, 나는 이유를 모르겠어요. 누군가이 예외가 던져진 이유를 설명 할 수 있습니까? 그것은 큰 도움이 될 것입니까?

+0

. asFloatBuffer 문서를 읽습니다. – njzk2

답변

4

할당 된 FloatBuffer에 반환 할 배킹 배열이 없습니다. FloatBuffer.hasArray()을 참조하십시오. 당신이 원하는 효과를 달성하기 위해, FloatBuffer.get(float[])

샘플 코드를 통해 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 
+0

해결책 주셔서 감사합니다. –