我有一个平面缓冲区定义如下:
struct Config {
...
}
table Commands {
...
}
table Request {
config : Config
command : [Commands]
data : [ubyte]
}
收到请求并处理它后,我想发送到其他设备,而不带
data
字段,即只有配置和命令。
有了 C 结构的知识,我可以发送大小为 sizeof(Request) - sizeof(data) 的 Request 的第一个字节。
它适用于 Flatbuffer 吗?
如果答案是否定的,如果
data
字段始终是请求构建器中最后添加的字段怎么办?
是否将 data
字段放在请求末尾以便我可以跳过它?
不支持您具体要求的内容,FlatBuffers比结构稍微复杂一点,请参阅https://flatbuffers.dev/flatbuffers_internals.html
实现此目的的最佳支持方法是将
config
和 command
粘贴在自己的表中,然后将该根表中的表引用为 nested_flatbuffer
(请参阅文档),为您提供一个可以发送的独立缓冲区从那时起。
你也可以破解它,因为
data
,如果你先序列化它,确实会在缓冲区的末尾结束,因此在data
的第一个字节处截断缓冲区会给你一个主要功能的FlatBuffer。然而,它不是一个正确的 FlatBuffer,因此验证程序会失败,访问 data
可能会因越界访问而崩溃。