Ho conoscenza di base dei flussi di file in C++ e Google FlatBuffers. Il file Schema è piuttosto semplice, crea anche un buffer e legge da un puntatore del buffer. La cosa che non ottengo è come salvare più buffer in un file binario, quindi leggere il file binario su e ottenere un buffer casuale.FlatBuffers: scrivere e leggere dal file binario?
Ecco un semplice schema di due array di carri:
table Car {
field_a:[float];
field_b:[float];
}
.
Una funzione per costruire il buffer (pur senza il salvataggio del file):
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"?
}
.
E una funzione per la lettura del buffer dopo che è stato letto dal file binario (senza la lettura di file):
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);
}
}
Non sono sicuro se il modo di accedere informazioni del buffer è corretta. Ad esempio il modo per ottenere la lunghezza dei campi dell'array.
Gli esempi di codice per l'interazione tra file (scrittura/lettura di più buffer in un file) sarebbero i benvenuti.
+1 Non riesco a trovare niente di questo nella documentazione. (Non esiste un riferimento API per FlatBufferBuilder, e mi fa impazzire.) – masonk