উদাহরণসহ ডাটা সিরিয়ালাইজেশন করা

FlatBuffers এর মাধ্যমে ডাটা সিরিয়ালাইজেশন - ফ্লাট বাফারস (Flat Buffers) - Latest Technologies

239

FlatBuffers দিয়ে উদাহরণসহ ডাটা সিরিয়ালাইজেশন

FlatBuffers দিয়ে ডাটা সিরিয়ালাইজেশন করা একটি সহজ প্রক্রিয়া, যেখানে স্কিমা ডিফাইন করা থেকে শুরু করে ডেটা তৈরি এবং সংরক্ষণ করা হয়। নিচে একটি ধাপে ধাপে নির্দেশিকা দেওয়া হলো উদাহরণের মাধ্যমে।


১. FlatBuffers Schema তৈরি করা

প্রথমে একটি FlatBuffers স্কিমা ফাইল তৈরি করতে হবে, যা ডেটার কাঠামো নির্ধারণ করবে। নিচে একটি উদাহরণ schema দেওয়া হলো।

Schema (monster.fbs)

namespace MyGame.Sample;

// Monster টেবিল
table Monster {
    id: int;            // মনস্টারের আইডি
    name: string;      // মনস্টারের নাম
    health: float;     // স্বাস্থ্য মান
    inventory: [string]; // ইনভেন্টরির আইটেমের তালিকা
}

// মূল ধরনের সংজ্ঞা
root_type Monster;

২. স্কিমা ফাইল কম্পাইল করা

FlatBuffers কম্পাইলার (flatc) ব্যবহার করে স্কিমা ফাইলটি কম্পাইল করুন। এটি ডেটার জন্য কোড উৎপন্ন করবে।

flatc --cpp monster.fbs

৩. C++ কোডে ডেটা সিরিয়ালাইজেশন করা

FlatBuffers ব্যবহার করে ডেটা সিরিয়ালাইজ করার জন্য একটি C++ প্রোগ্রাম তৈরি করুন।

C++ উদাহরণ

#include "monster_generated.h" // উৎপন্ন FlatBuffers ফাইল
#include <iostream>
#include <fstream>

using namespace MyGame::Sample;

int main() {
    // FlatBuffer Builder তৈরি করা
    flatbuffers::FlatBufferBuilder builder;

    // Monster টেবিল তৈরি করা
    auto name = builder.CreateString("Orc"); // মনস্টারের নাম
    auto inventory = builder.CreateVector({"Sword", "Axe"}); // ইনভেন্টরি আইটেম তৈরি করা

    MonsterBuilder monster_builder(builder);
    monster_builder.add_id(1);               // ID সেট করা
    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;

    return 0;
}

৪. কোডের ব্যাখ্যা

  • FlatBufferBuilder: এটি একটি বিল্ডার অবজেক্ট যা FlatBuffers ডেটা তৈরি করার জন্য ব্যবহৃত হয়।
  • CreateString: মনস্টারের নামের জন্য একটি স্ট্রিং তৈরি করা হয়েছে।
  • CreateVector: ইনভেন্টরির জন্য একটি ভেক্টর তৈরি করা হয়েছে।
  • MonsterBuilder: এটি Monster টেবিলের জন্য একটি বিল্ডার যা বিভিন্ন ফিল্ড সেট করতে সক্ষম।
  • Finish: টেবিল তৈরি সম্পন্ন করার জন্য ব্যবহৃত হয় এবং এর ফলাফল প্রদান করে।
  • ofstream: বাইনারি ফাইল হিসেবে ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।

৫. বাইনারি ডেটা পঠন

FlatBuffers ব্যবহার করে তৈরি করা বাইনারি ডেটা পড়ার জন্য নিম্নলিখিত কোড ব্যবহার করা যেতে পারে:

// বাইনারি ডেটা পড়া
std::ifstream ifs("monster_data.bin", std::ios::binary);
std::vector<char> buffer((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
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;
}

সারসংক্ষেপ

  1. Schema তৈরি: FlatBuffers স্কিমা ফাইল ব্যবহার করে ডেটার কাঠামো নির্ধারণ করা হয়।
  2. ডেটা সিরিয়ালাইজেশন: C++ কোড ব্যবহার করে ডেটা সিরিয়ালাইজ করা হয় এবং একটি বাইনারি ফাইলে সংরক্ষণ করা হয়।
  3. ডেটা পড়া: সংরক্ষিত বাইনারি ডেটা পড়ার জন্য FlatBuffers ব্যবহার করা হয়।

FlatBuffers ডেটা সিরিয়ালাইজেশন একটি দ্রুত এবং কার্যকরী পদ্ধতি, যা গেম ডেভেলপমেন্ট এবং অন্যান্য উচ্চ কার্যক্ষমতা সম্পন্ন অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত উপকারী।

Content added By
Promotion

Are you sure to start over?

Loading...