C++ 및 Google FlatBuffers의 파일 스트림에 대한 기본 지식이 있습니다. 스키마 파일은 매우 단순하며 버퍼를 만들고 버퍼 포인터에서 을 읽습니다. 내가 얻지 못하는 것은 여러 개의 버퍼를 바이너리 파일에 저장하는 방법입니다. 그리고 그 바이너리 파일을 읽어서 임의의 버퍼를 얻습니다.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);
}
}
버퍼의 정보에 액세스 할 수있는 방법이 올바른지 확실하지. 예를 들어, 배열 필드의 길이를 얻는 방법.
파일 상호 작용 (하나의 파일에서 쓰기/읽기 다중 버퍼)에 대한 코드 예제를 환영합니다.
일에 대한
을 ::. (FlatBufferBuilder에 대한 API 참조가 없으므로 나를 미치게 만듭니다.) – masonk