首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flatbuffers验证器行为

Flatbuffers验证器行为
EN

Stack Overflow用户
提问于 2016-05-27 15:15:13
回答 1查看 4.2K关注 0票数 2

如果这两个对象的模式中的表是从相似的数据类型开始的话,是否有任何方法可以使用平面缓冲区验证器来验证字节数组中的平面缓冲区结构?

示例模式:

代码语言:javascript
复制
table AddTaskResponse{
    blablabla:int;
    foobar:int;
}

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

我目前的实验告诉我:

代码语言:javascript
复制
flatbuffers::Verifier verifier(reinterpret_cast<unsigned char*>(data.data()),data.size());
bool isaddTaskResponse = VerifyAddTaskResponseBuffer(verifier);
bool isaddTaskRequest = VerifyAddTaskRequestBuffer(verifier);

两个bools标志isaddTaskResponse和isaddTaskRequest都是true,它们的真实状态并不取决于我发送给AddTaskResponseAddTaskRequest的实际结构。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-27 16:18:59

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

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

虽然这是可行的,但不建议这样做,因为它会使模式演化复杂化,并且您正在对实现做一些假设。您应该始终通过外部上下文或内部(使用联合类型)知道缓冲区的确切类型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37486992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档