我们有以下情况:
mmap()
。flatbuffers::Verifier
类来检查我们收到的FlatBuffer是否正确我们的方法是将有关对象的元信息存储在[ObjectInfo]
中,并二进制连接所有图像对象,然后将其放入ubyte向量中。
但是我们必须手动跟踪指向缓冲区的指针以及我们在objects
向量内的位置。我们不能从Flatbuffer生成的代码访问objects
中获利。
问题的架构示例:
root_type Container;
table Container {
// Information about the big objects, has to fit into RAM,
metaInfo:[ObjectInfo]
// Does not fit into RAM, has to be streamed with arbitrary size buffer
bigObjects:[Objects];
}
table ObjectInfo {
type:int;
name:string;
offset:double; // Offset within Objects
length:double; // length of object
}
table Objects {
objects:[ubyte] // Contains the objects, contatinated
}
我们需要部分处理Flatbuffer。 我们该怎么办?
答案 0 :(得分:1)
使用FlatBuffers并没有完美的方法,这需要大量的技巧。您无法验证部分缓冲区。您不能安全地遵循对其他表的引用,等等。
如果要流式传输,请将每个数据放入各自适合于ram的自己的FlatBuffer中,然后流式传输此类缓冲区的序列。您可以使用SizePrefixed
功能使这些缓冲区易于流传输。您可以使用file_identifier
来识别不同类型的缓冲区。
此外,不要对偏移量/长度数据使用double
,请使用适当大小的整数类型。