【发布时间】:2014-11-06 17:29:24
【问题描述】:
我对 C++ 和 Google FlatBuffers 中的文件流有基本的了解。 Schema 文件非常简单,也创建了一个缓冲区并读取 从缓冲区指针。我不明白的是如何将多个缓冲区保存到一个二进制文件中,然后将该二进制文件读取到 获取任意随机缓冲区。
这是一个带有两个浮点数组的简单 Schema:
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 我在文档中找不到任何关于此的内容。 (FlatBufferBuilder 没有 API 参考,这让我抓狂。)
标签: c++ serialization fstream binaryfiles flatbuffers