为什么FlatBufferBuilder.dataBuffer返回的缓冲区与java.nio.ByteBuffer.wr



我正试图通过网络将一个float从windows上用c#编写的程序发送到使用flatbuffers用java编写的android应用程序。

根据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;

这是显示行为的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

array()获取原始underyimg缓冲区,其中包含偏移量可能不是0的FlatBuffer。相反,FlatBufferBuilder中有一个方法(我现在不知道它的名字)可以为您获取缓冲区。

最新更新