gpt4 book ai didi

c++ - Flatbuffers 验证器行为

转载 作者:行者123 更新时间:2023-11-30 03:41:15 24 4
gpt4 key购买 nike

如果两个对象的模式中的表从相似的数据类型开始,是否有任何方法可以使用 flatbuffer 验证器验证其中具有 flatbuffer 结构的 bytearray?

示例模式:

table AddTaskResponse{
blablabla:int;
foobar:int;
}

table AddTaskRequest{
requestId:int;
taskId:int;
profileId:string;
}

我目前的实验表明:

flatbuffers::Verifier verifier(reinterpret_cast<unsigned char*>(data.data()),data.size());
bool isaddTaskResponse = VerifyAddTaskResponseBuffer(verifier);
bool isaddTaskRequest = VerifyAddTaskRequestBuffer(verifier);

bool 标志 isaddTaskResponse 和 isaddTaskRequest 均为真,它们的真实状态不取决于我发送的实际结构 AddTaskResponseAddTaskRequest

最佳答案

验证器只是检查数据在结构上是否合理(没有偏移超出范围),但是缓冲区中没有关于类型的数据,所以是的,如果类型兼容,它就会工作。

在这种情况下,如果响应验证器看到一个请求缓冲区,它认为它是来自 future 版本模式的缓冲区(它有一个额外的字段,被忽略)。同样,如果请求验证器看到一个响应缓冲区,它会认为它得到了旧版本的模式,因为缺少一个字段。

虽然这可行,但不推荐这样做,因为它会使模式演变复杂化,并且您要对实现做出一些假设。您应该始终知道缓冲区的确切类型,无论是通过外部上下文还是内部(例如使用 union 类型)。

关于c++ - Flatbuffers 验证器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486992/

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