2016-05-03 14 views
0

Ich versuche, ein Float über das Netzwerk von einem Programm in C# auf Windows geschrieben zu einer Android-Anwendung geschrieben in Java mit Flatbuffers zu senden.Warum gibt FlatBufferBuilder.dataBuffer einen anderen Puffer zurück als java.nio.ByteBuffer.wrap?

Aus den empfangenen Bytes in der Android-Anwendung wird ein Puffer mit java.nio.ByteBuffer.wrap erstellt. Aus diesem Puffer wird das Beispielobjekt deserialisiert. Dies führt jedoch dazu, dass jeder Float auf 0 gesetzt wird.

Im folgenden Beispiel wird dieses Verhalten gezeigt.

Warum gibt "example2" den Wert 0.0 anstelle von 20.0 zurück?

Dies ist das Schema i verwenden:

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

Dies ist der Java-Code, die das Verhalten zeigen:

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

Ausgang:

System.out: 1: Myfloat: 20.0 
System.out: 2: Myfloat: 0.0 
+0

Was schlägt die Quelle für FlatBuffers vor? –

+0

In der Quelle von Flatbuffers verwendet es einen java.nio.Bytebuffer mit kleiner Endian-Reihenfolge. Selbst wenn ich den Puffer für example2 in little endian ändere, hat er immer noch das gleiche Ergebnis. –

Antwort

1

array() wird das rohe Underlyimg-Puffer, der den FlatBuffer bei einem Offset enthält, der möglicherweise nicht 0 ist. Stattdessen gibt es eine Methode in FlatBufferBui Ider (wessen Name mir gerade entgeht), der dir den Puffer bringen wird.

+0

Danke, es war in der Tat der Offset. –