Я пытаюсь отправить поплавок по сети из программы, написанной на C# в окнах, в приложение для Android, написанное в java, с помощью плоских буферов.Почему FlatBufferBuilder.dataBuffer возвращает другой буфер, чем java.nio.ByteBuffer.wrap?
Из полученных байтов в приложении 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
Что предлагает источник для FlatBuffers? –
В источнике Flatbuffers используется java.nio.Bytebuffer с минимальным порядком. Даже если я изменил буфер для example2 на маленький endian, он все равно имеет тот же результат. –