2016-05-03 10 views
0

私は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 
+0

FlatBuffersのソースは何を提案していますか? –

+0

Flatbuffersのソースでは、リトルエンディアンの順序でjava.nio.Bytebufferを使用します。たとえ私がリトルエンディアンにexample2のバッファを変更しても、それは同じ結果を持っています。 –

答えて

1

配列()生を取得おそらく0以外のオフセットでFlatBufferを含むunderlyimgバッファです。代わりに、FlatBufferBuiにメソッドがありますlder(その名前は今私をエスケープする)は、あなたにバッファを取得します。

+0

ありがとう、それは実際に相殺されました。 –

関連する問題