मुझे सी ++ और Google 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 मैं डॉक्स में इस बारे में कुछ भी नहीं मिल सकता है के लिए। (FlatBufferBuilder के लिए कोई एपीआई संदर्भ नहीं है, और यह मुझे पागल बनाता है।) – masonk