如果这两个对象的模式中的表是从相似的数据类型开始的话,是否有任何方法可以使用平面缓冲区验证器来验证字节数组中的平面缓冲区结构?
示例模式:
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);两个bools标志isaddTaskResponse和isaddTaskRequest都是true,它们的真实状态并不取决于我发送给AddTaskResponse或AddTaskRequest的实际结构。
发布于 2016-05-27 16:18:59
验证器只是检查数据在结构上是否合理(没有偏移超出范围),但是缓冲区中没有关于类型的数据,所以是的,如果类型是兼容的,它就会工作。
在这种情况下,如果响应验证器看到请求缓冲区,它会认为它是模式的未来版本的缓冲区(它有一个额外的字段,会被忽略)。类似地,如果请求验证器看到响应缓冲区,它会认为它得到了模式的旧版本,因为缺少一个字段。
虽然这是可行的,但不建议这样做,因为它会使模式演化复杂化,并且您正在对实现做一些假设。您应该始终通过外部上下文或内部(使用联合类型)知道缓冲区的确切类型。
https://stackoverflow.com/questions/37486992
复制相似问题