簡體   English   中英

flatbuffers :: Table *到buffer_pointer

[英]flatbuffers::Table* to buffer_pointer

考慮這種情況。 我正在使用CreateXXX生成的代碼創建一個struct( flatbuffers::Table )。 這將在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;

顯而易見的答案是,您保留了原始緩沖區指針(和大小)。 然后,您可以通過寫出現有緩沖區來“重新序列化”它。

如果確實必須僅使用根(在本例中為li ,則有一個GetBufferStartFromRootPointer函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM