Windows에서 C #으로 작성된 프로그램에서 플랫 버퍼를 사용하여 Java로 작성된 Android 응용 프로그램으로 네트워크를 통해 부동 소수점을 보내려고합니다.
안드로이드 애플리케이션의 수신 된 바이트에서 버퍼는 java.nio.ByteBuffer.wrap을 사용하여 빌드됩니다. 이 버퍼에서 Example 개체는 역 직렬화됩니다. 그러나 이로 인해 모든 부동 소수점이 0으로 설정됩니다.
아래 예에서이 동작이 표시됩니다.
"example2"가 0.0
대신 값을 반환하는 이유는 무엇 20.0
입니까?
이것은 내가 사용하는 스키마입니다.
// Example IDL file for our monster's schema.
namespace MyGame.Sample;
table Example {
myFloat:float;
}
root_type Example;
이것은 동작을 보여주는 자바 코드입니다.
//The float
float myFloat = 20.0f;
FlatBufferBuilder builder = new FlatBufferBuilder(0);
//Build the example
Example.startExample(builder);
Example.addMyFloat(builder, myFloat);
int exampleInt = Example.endExample(builder);
builder.finish(exampleInt);
java.nio.ByteBuffer buf = builder.dataBuffer();
Example example = Example.getRootAsExample(buf);
System.out.println("1: Myfloat: " + example.myFloat());
byte[] bytesBuf = buf.array();
Example example2 = Example.getRootAsExample(java.nio.ByteBuffer.wrap(bytesBuf));
System.out.println("2: Myfloat: " + example2.myFloat());
산출:
System.out: 1: Myfloat: 20.0
System.out: 2: Myfloat: 0.0
array ()는 0 이외의 오프셋에 FlatBuffer를 포함하는 원시 underlyimg 버퍼를 가져옵니다. 대신 FlatBufferBuilder에 버퍼를 얻을 수있는 메서드가 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다