为什么FlatBufferBuilder.dataBuffer返回与java.nio.ByteBuffer.wrap不同的缓冲区?

时间:2016-05-03 15:12:13

标签: java flatbuffers

我试图通过网络从一个用Windows编写的程序发送一个浮点数到一个用java编写的使用flatbuffers的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

1 个答案:

答案 0 :(得分:1)

array()获取原始的underlyimg缓冲区,其中包含一个偏移量可能不是0的FlatBuffer。相反,FlatBufferBuilder中的一个方法(其名称现在让我逃脱)将获得缓冲区。 / p>