我正在使用一个库,该库要求我在文件中提供所需数据的偏移量,因此它可以使用mmap读取数据(我无法编辑该库的代码,而只能提供偏移)。
所以我想使用平面缓冲区来序列化我的整个数据,因为在平面缓冲区中没有任何打包和解包(我认为),这意味着很容易在二进制文件中获得所需部分的偏移量。 / p>
但是我不知道如何获得补偿。我尝试加载二进制文件并计算所需字段的指针的偏移量,例如,根的地址为1111,所需字段的地址为1222,因此二进制文件中字段的偏移量为1222-1111 = 111(因为没有开箱步骤)。但是实际上,指针的偏移量是一个很大的负数。
有人可以帮助我解决这个问题吗?预先感谢!
答案 0 :(得分:0)
FlatBuffers确实非常适合mmap
。没有偏移量可以计算,因为生成的代码为您完成了所有工作。您应该简单地mmap
整个FlatBuffers文件,然后从auto root = GetRoot<MyRootType>(my_mmapped_buffer)
开始正常使用字段访问器。如果要直接指向较大字段(例如字符串或向量)中的数据,请再次使用提供的API:root->my_string_field()->c_str()
(例如,它将指向映射缓冲区内)。>