1

Windows 上の C# で記述されたプログラムから、フラットバッファを使用して Java で記述された Android アプリケーションにフロートをネットワーク経由で送信しようとしています。

Android アプリケーションで受信したバイトから、java.nio.ByteBuffer.wrap を使用してバッファが構築されます。このバッファから、Example オブジェクトが逆シリアル化されます。ただし、これにより、すべての float が 0 に設定されます。

以下の例では、この動作が示されています。

「example2」が0.0ではなく値を返すのはなぜ20.0ですか?

これは私が使用するスキーマです:

// Example IDL file for our monster's schema.
namespace MyGame.Sample;
table Example {
  myFloat:float;
}
root_type Example;

これは、動作を示す Java コードです。

//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
4

1 に答える 1