我有C++和谷歌文件流的基本知識。 Schema文件非常簡單,也可以創建緩衝區並從緩衝區指針讀取 。我沒有得到的是如何將多個緩衝區保存到一個二進制文件,然後讀取該二進制文件到 得到任何隨機緩衝區。FlatBuffers:寫入和讀取二進制文件?
下面是一個簡單的架構,則浮子的兩個陣列:
table Car {
field_a:[float];
field_b:[float];
}
。
用於建立緩衝(儘管沒有將文件保存)功能:
bool save_flatbuf(string file_path, vector<double> vec_a, vector<double> vec_b) {
flatbuffers::FlatBufferBuilder builder;
auto vec_floats_a = builder.CreateVector(vec_a, vec_a.size());
auto vec_floats_b = builder.CreateVector(vec_b, vec_b.size());
auto mloc = CreateCar(builder, &vec_floats_a, &vec_floats_b);
builder.Finish(mloc);
// How to save it into a binary file with a list of "Cars"?
}
。
以及讀取緩衝區它從二進制文件中讀取後(沒有文件讀取)功能:
bool read_flatbuf(string file_path) {
// How to get the buffer pointer to a "Car" from a binary file with a "list of Cars" ? .
vector<double> final_vec_a;
vector<double> final_vec_b;
auto car = GetCar(buffer_pointer);
auto fa = car->field_a();
auto fb = car->field_b();
final_vec_a.resize(fa->size());
for (int i = 0; i < fa->size(); i++) {
final_vec_a[i] = fa->Get(i);
}
final_vec_b.resize(fb->size());
for (int i = 0; i < fb->size(); i++) {
final_vec_b[i] = fb->Get(i);
}
}
不知道如果訪問該緩衝區的信息的方式是正確的。例如獲取數組字段長度的方法。
文件交互的代碼示例(在一個文件中寫入/讀取多個緩衝區)將受到歡迎。
+1我無法找到有關此內容的文檔任何東西。 (沒有API參考的FlatBufferBuilder,它讓我瘋狂。) – masonk 2015-07-13 19:26:18