gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:24:23 27 4
gpt4 key购买 nike

我正在尝试通过网络从 Windows 上用 C# 编写的程序向使用 Flatbuffers 用 java 编写的 Android 应用程序发送 float 。

根据 Android 应用程序中接收到的字节,使用 java.nio.ByteBuffer.wrap 构建缓冲区。从该缓冲区中,Example 对象被反序列化。然而,这会导致每个 float 都被设置为 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() 获取原始的 underlyimg 缓冲区,其中包含偏移量可能不是 0 的 FlatBuffer。相反,FlatBufferBuilder 中有一个方法(我现在忘记了它的名字)可以获取缓冲区。

关于java - 为什么 FlatBufferBuilder.dataBuffer 返回与 java.nio.ByteBuffer.wrap 不同的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com