私はflatbuffersを使用してJavaで書かれたアンドロイドアプリケーションにWindows上のC#で書かれたプログラムからネットワーク上でフロートを送信しようとしています。FlatBufferBuilder.dataBufferがjava.nio.ByteBuffer.wrapと異なるバッファを返すのはなぜですか?
アンドロイドアプリケーションの受信バイトから、バッファはjava.nio.ByteBuffer.wrapを使用してビルドされます。このバッファから、Exampleオブジェクトは逆シリアル化されます。これにより、すべてのフロートが0に設定されます。
この例では、この動作を示しています。
なぜ「example2」はの代わりに0.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
FlatBuffersのソースは何を提案していますか? –
Flatbuffersのソースでは、リトルエンディアンの順序でjava.nio.Bytebufferを使用します。たとえ私がリトルエンディアンにexample2のバッファを変更しても、それは同じ結果を持っています。 –