考虑一下这个场景。我正在使用CreateXXX生成的代码创建一个结构(flatbuffers::Table)。这将在FlatBuffer缓冲区上创建结构,并给出偏移量。然后,我可以使用GetBufferPointer()获取内存块并将其传输。相反,如果我得到一个内存块,我可以使用GetXXX从它获得我的结构(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;发布于 2019-07-16 13:36:51
显而易见的答案是,您可以保留原始的缓冲区指针(和大小)。然后你可以通过写出现有的缓冲区来“重新序列化”它。
如果您确实必须只使用根目录(在您的示例中为li),则有一个函数GetBufferStartFromRootPointer。
https://stackoverflow.com/questions/57050428
复制相似问题