Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么FlatBufferBuilder.dataBuffer返回的缓冲区与java.nio.ByteBuffer.wrap不同?_Java_Flatbuffers - Fatal编程技术网

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

为什么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.

我试图通过网络将一个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.
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,它仍然有相同的结果。谢谢,它确实是偏移量。