有没有办法只发送 Flatbuffer 的第一部分?

问题描述 投票:0回答:1

我有一个平面缓冲区定义如下:

struct Config {
   ...
}
table Commands {
   ...
}
table Request {
   config : Config
   command : [Commands]
   data : [ubyte]
}

收到请求并处理它后,我想发送到其他设备,而不带

data
字段,即只有配置和命令。 有了 C 结构的知识,我可以发送大小为 sizeof(Request) - sizeof(data) 的 Request 的第一个字节。 它适用于 Flatbuffer 吗?

如果答案是否定的,如果

data
字段始终是请求构建器中最后添加的字段怎么办? 是否将
data
字段放在请求末尾以便我可以跳过它?

flatbuffers
1个回答
0
投票

不支持您具体要求的内容,FlatBuffers比结构稍微复杂一点,请参阅https://flatbuffers.dev/flatbuffers_internals.html

实现此目的的最佳支持方法是将

config
command
粘贴在自己的表中,然后将该根表中的表引用为
nested_flatbuffer
(请参阅文档),为您提供一个可以发送的独立缓冲区从那时起。

你也可以破解它,因为

data
,如果你先序列化它,确实会在缓冲区的末尾结束,因此在
data
的第一个字节处截断缓冲区会给你一个主要功能的FlatBuffer。然而,它不是一个正确的 FlatBuffer,因此验证程序会失败,访问
data
可能会因越界访问而崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.