为什么FlatBufferBuilder.dataBuffer返回的缓冲区与java.nio.ByteBuffer.wrap不同?
我试图通过网络将一个float从windows上用c#编写的程序发送到使用flatbuffers用java编写的android应用程序 从android应用程序中接收的字节中,使用java.nio.ByteBuffer.wrap构建缓冲区。从该缓冲区反序列化示例对象。但是,这会导致每个浮点值都设置为0 在下面的示例中,显示了此行为 为什么“example2”返回值为什么FlatBufferBuilder.dataBuffer返回的缓冲区与java.nio.ByteBuffer.wrap不同?,java,flatbuffers,Java,Flatbuffers,我试图通过网络将一个float从windows上用c#编写的程序发送到使用flatbuffers用java编写的android应用程序 从android应用程序中接收的字节中,使用java.nio.ByteBuffer.wrap构建缓冲区。从该缓冲区反序列化示例对象。但是,这会导致每个浮点值都设置为0 在下面的示例中,显示了此行为 为什么“example2”返回值0.0,而不是20.0 这是我使用的模式: // Example IDL file for our monster's schema.
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中有一个方法(我现在不知道它的名字)可以为您提供缓冲区。FlatBuffers的源代码有什么建议?在FlatBuffers的源代码中,它使用了一个具有小endian顺序的java.nio.Bytebuffer。即使我将缓冲区(例如2)更改为little endian,它仍然有相同的结果。谢谢,它确实是偏移量。