gpt4 book ai didi

c++ - FlatBuffers:写入和读取二进制文件?

转载 作者:可可西里 更新时间:2023-11-01 16:17:52 25 4
gpt4 key购买 nike

我对 C++ 和 Google 中的文件流有基本的了解 FlatBuffers . Schema文件很简单,同样是创建缓冲区和读取从缓冲区指针。我不明白的是如何将多个缓冲区保存到一个二进制文件中,然后将该二进制文件读取到获取任何随机缓冲区。

这是一个带有两个 float 数组的简单架构:

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);
}
}

不确定访问缓冲区信息的方式是否正确。例如获取数组字段长度的方法。

欢迎提供文件交互的代码示例(在一个文件中写入/读取多个缓冲区)。

最佳答案

执行此操作的最佳方法是将该汽车列表添加到您的架构中:

table Garage {
cars:[Car];
}

然后您可以收集多个汽车偏移量(来自 CreateCar),对它们调用 CreateVector,对其调用 CreateGarage,然后提供Finish 的结果。

要阅读,请从 GetGarage(buffer_pointer) 开始。

关于c++ - FlatBuffers:写入和读取二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26785667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com