flatbuffers :: Table *到buffer_pointer

时间:2019-07-16 05:15:02

标签: c++ flatbuffers

请考虑这种情况。 我正在使用flatbuffers::Table生成的代码创建一个struct(CreateXXX)。这将在FlatBuffer缓冲区上创建该结构,并为我提供偏移量。 然后,我可以使用GetBufferPointer()获取内存块并进行传输。 相反,如果得到内存块,则可以使用GetXXX从中获取我的struct(flatbuffers::Table)。

但是在获得此结构后,如果需要再次对其进行序列化,该怎么办?序列化之后,我应该能够像以前一样传输数据并对该数据执行GetXXX。

flatbuffers::Parser parser;
parser.Parse(schema.c_str());
parser.SetRootType("license");
parser.Parse(j.c_str());

auto* buf = parser.builder_.GetBufferPointer();
auto li = flatbuffers::GetRoot<license>(buf);

std::cout << "ID: " << li->id()->c_str() << " Rand: " << li->rand()->c_str() << " Secret: " << li->secret()->c_str() << std::endl;

uint8_t* buf2 = ????????????
auto li2 = flatbuffers::GetRoot<license>(buf2);

std::cout << "ID: " << li2->id()->c_str() << " Rand: " << li2->rand()->c_str() << " Secret: " << li2->secret()->c_str() << std::endl;

1 个答案:

答案 0 :(得分:0)

显而易见的答案是,您保留了原始缓冲区指针(和大小)。然后,只需写出现有缓冲区就可以“重新序列化”它。

如果您确实必须仅使用根(在示例中为GetBufferStartFromRootPointer),则有一个函数li