FlatBuffers এর মাধ্যমে উদাহরণসহ ডাটা ডেসিরিয়ালাইজেশন প্রক্রিয়া
FlatBuffers ব্যবহার করে ডেটা ডেসিরিয়ালাইজেশন হল একটি প্রক্রিয়া যেখানে বাইনারি ফরম্যাটে সংরক্ষিত ডেটা পুনরুদ্ধার করে তা প্রোগ্রামে ব্যবহৃত কাঠামোর মধ্যে রূপান্তরিত করা হয়। এই প্রক্রিয়াটি বিশেষভাবে দ্রুত এবং মেমোরি কার্যকরী কারণ এটি "zero-copy" অ্যাক্সেস প্রদান করে, অর্থাৎ ডেটা অ্যাক্সেস করার সময় কোন কপি তৈরি করার প্রয়োজন হয় না।
উদাহরণ Schema
প্রথমে একটি FlatBuffers Schema তৈরি করতে হবে। এখানে আমরা একটি Monster টেবিল তৈরি করব।
Schema (monster.fbs)
namespace MyGame.Sample;
// Monster টেবিল
table Monster {
id: int; // মনস্টারের আইডি
name: string; // মনস্টারের নাম
health: float; // স্বাস্থ্য মান
inventory: [string]; // ইনভেন্টরির আইটেমের তালিকা
}
// মূল ধরনের সংজ্ঞা
root_type Monster;
১. স্কিমা ফাইল কম্পাইল করা
FlatBuffers কম্পাইলার (flatc) ব্যবহার করে স্কিমা ফাইলটি কম্পাইল করুন, যাতে C++ কোড উৎপন্ন হয়।
flatc --cpp monster.fbs
২. ডেটা সিরিয়ালাইজেশন
FlatBuffers ব্যবহার করে কিছু ডেটা সিরিয়ালাইজ করুন। নিচে C++ প্রোগ্রামের মাধ্যমে ডেটা সিরিয়ালাইজেশন করা হয়েছে।
C++ কোড (ডেটা সিরিয়ালাইজেশন)
#include "monster_generated.h" // উৎপন্ন FlatBuffers ফাইল
#include <iostream>
#include <fstream>
using namespace MyGame::Sample;
void serializeData() {
flatbuffers::FlatBufferBuilder builder;
// Monster টেবিল তৈরি করা
auto name = builder.CreateString("Orc");
auto inventory = builder.CreateVector({"Sword", "Axe"});
MonsterBuilder monster_builder(builder);
monster_builder.add_id(1);
monster_builder.add_name(name);
monster_builder.add_health(100.0f);
monster_builder.add_inventory(inventory);
auto orc = monster_builder.Finish();
builder.Finish(orc);
// বাইনারি ডেটা সংরক্ষণ করা
std::ofstream ofs("monster_data.bin", std::ios::binary);
ofs.write(reinterpret_cast<const char*>(builder.GetBufferPointer()), builder.GetSize());
ofs.close();
std::cout << "Monster data serialized and saved to monster_data.bin" << std::endl;
}
৩. ডেটা ডেসিরিয়ালাইজেশন
ডেটা ডেসিরিয়ালাইজ করার জন্য আমরা তৈরি করা বাইনারি ফাইলটি পড়বো এবং FlatBuffers লাইব্রেরি ব্যবহার করে ডেটার ফিল্ডগুলি অ্যাক্সেস করবো।
C++ কোড (ডেটা ডেসিরিয়ালাইজেশন)
void deserializeData() {
// বাইনারি ডেটা পড়া
std::ifstream ifs("monster_data.bin", std::ios::binary);
std::vector<char> buffer((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
// FlatBuffers থেকে ডেটা অ্যাক্সেস করা
const Monster* monster = GetMonster(buffer.data());
// ডেটা প্রদর্শন করা
std::cout << "Monster ID: " << monster->id()
<< ", Name: " << monster->name()->c_str()
<< ", Health: " << monster->health() << std::endl;
// ইনভেন্টরি আইটেমগুলো প্রিন্ট করা
for (const auto& item : *monster->inventory()) {
std::cout << "Inventory Item: " << item->c_str() << std::endl;
}
}
৪. মূল প্রোগ্রাম
int main() {
// প্রথমে ডেটা সিরিয়ালাইজ করা
serializeData();
// পরে ডেটা ডেসিরিয়ালাইজ করা
deserializeData();
return 0;
}
কোডের ব্যাখ্যা
- serializeData: FlatBuffers ব্যবহার করে ডেটা তৈরি করে এবং একটি বাইনারি ফাইলে সংরক্ষণ করে।
- deserializeData: সংরক্ষিত বাইনারি ফাইল থেকে ডেটা পড়ে এবং FlatBuffers লাইব্রেরি ব্যবহার করে ডেটা অ্যাক্সেস করে।
- GetMonster: বাইনারি ডেটা থেকে Monster অবজেক্টকে ফিরে দেয়, যাতে ফিল্ডগুলির মান অ্যাক্সেস করা যায়।
- Zero-Copy Access: ডেটা অ্যাক্সেস করার সময় বাইনারি ডেটা সরাসরি অ্যাক্সেস করা হয়, যা মেমোরি ব্যবস্থাপনাকে উন্নত করে।
সারসংক্ষেপ
- FlatBuffers ডাটা ডেসিরিয়ালাইজেশন: বাইনারি ফরম্যাট থেকে কাঠামোতে রূপান্তরিত করার প্রক্রিয়া।
- সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন উদাহরণ: উদাহরণ কোডে FlatBuffers ব্যবহার করে ডেটা তৈরি এবং পুনরুদ্ধারের প্রক্রিয়া প্রদর্শন করা হয়েছে।
FlatBuffers ডাটা ডেসিরিয়ালাইজেশন একটি দ্রুত এবং কার্যকরী প্রক্রিয়া, যা গেম ডেভেলপমেন্ট এবং অন্যান্য উচ্চ কার্যক্ষমতা সম্পন্ন অ্যাপ্লিকেশনগুলির জন্য বিশেষভাবে উপকারী।
Read more