FlatBuffers একটি কার্যকরী সিরিয়ালাইজেশন ফরম্যাট যা বিভিন্ন প্রোগ্রামিং ভাষায় সমর্থন করে, যার ফলে এটি বিভিন্ন প্ল্যাটফর্ম এবং ডিভাইসে ব্যবহারের জন্য অত্যন্ত উপযোগী। FlatBuffers এর মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট ডেটা স্ট্রাকচারকে বিভিন্ন ভাষায় সংজ্ঞায়িত এবং ব্যবহার করার অনুমতি দেয়।
FlatBuffers এর মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট
FlatBuffers এর মাধ্যমে আপনি নিচের প্রোগ্রামিং ভাষাগুলিতে কাজ করতে পারেন:
C++
- FlatBuffers এর জন্য প্রধান এবং প্রথম ভাষা। C++ এ উচ্চ কর্মক্ষমতার জন্য এটি কার্যকর।
Java
- Android অ্যাপ্লিকেশন এবং অন্যান্য Java ভিত্তিক সিস্টেমে ব্যবহারের জন্য উপযোগী।
Python
- স্ক্রিপ্টিং এবং ডেটা বিশ্লেষণ কাজে ব্যবহৃত হয়। Python ডেভেলপারদের জন্য সুবিধাজনক।
C#
- Windows এবং .NET ভিত্তিক অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়।
Go
- গুগল দ্বারা উন্নীত এবং ক্লাউড সেবায় ব্যবহারের জন্য আদর্শ।
JavaScript
- ওয়েব অ্যাপ্লিকেশন এবং ক্লায়েন্ট-সার্ভার যোগাযোগে ব্যবহৃত হয়।
Rust
- নিরাপত্তা এবং কর্মক্ষমতার জন্য জনপ্রিয়, FlatBuffers Rust প্রোজেক্টগুলিতে ব্যবহৃত হতে পারে।
PHP
- ওয়েব ডেভেলপমেন্টের জন্য ব্যবহৃত হয়, যেখানে ডেটা সঞ্চয় এবং স্থানান্তরের জন্য FlatBuffers ব্যবহার করা যেতে পারে।
Dart
- Flutter অ্যাপ্লিকেশনের জন্য ব্যবহৃত, যেখানে মোবাইল এবং ওয়েব ডেভেলপমেন্টের জন্য সুবিধাজনক।
মাল্টি-ল্যাঙ্গুয়েজ সাপোর্টের সুবিধা
ক্রস-প্ল্যাটফর্ম সমর্থন:
- FlatBuffers বিভিন্ন প্ল্যাটফর্মে ডেটা পরিচালনার জন্য বিভিন্ন ভাষায় সমর্থন প্রদান করে, যা অ্যাপ্লিকেশনগুলির মধ্যে ডেটা শেয়ার করা সহজ করে।
ডেটার স্থায়িত্ব:
- FlatBuffers স্কিমা দ্বারা সংজ্ঞায়িত ডেটা বিভিন্ন ভাষায় ব্যবহার করা যেতে পারে, যার ফলে ডেটার স্থায়িত্ব নিশ্চিত হয়।
সহজ ইন্টিগ্রেশন:
- বিভিন্ন ভাষায় FlatBuffers সমর্থন থাকায় এটি বিভিন্ন সিস্টেম এবং লাইব্রেরির সাথে সহজে ইন্টিগ্রেট করা যায়।
দ্রুত উন্নয়ন:
- বিভিন্ন ভাষায় কাজ করতে পারার কারণে ডেভেলপাররা তাদের পছন্দের ভাষা ব্যবহার করতে পারেন, যা উন্নয়ন প্রক্রিয়াকে দ্রুত করে।
উদাহরণ: স্কিমা ব্যবহার করে মাল্টি-ল্যাঙ্গুয়েজ কোড জেনারেশন
ধরা যাক, আপনার একটি FlatBuffers স্কিমা ফাইল আছে:
namespace Game;
table Monster {
name: string;
hp: int;
mana: int;
}
root_type Monster;
কোড জেনারেট করা
FlatBuffers Compiler (flatc) ব্যবহার করে বিভিন্ন ভাষায় কোড জেনারেট করতে পারেন। নিচের কমান্ডটি ব্যবহার করুন:
flatc --cpp --java --python --csharp --go --js monster.fbs
এটি C++, Java, Python, C#, Go, এবং JavaScript-এর জন্য কোড তৈরি করবে।
উপসংহার
FlatBuffers এর মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট এটি একটি শক্তিশালী ডেটা সিরিয়ালাইজেশন ফরম্যাট করে তোলে, যা বিভিন্ন প্ল্যাটফর্ম এবং ভাষায় ব্যবহারের জন্য উপযুক্ত। এটি ডেভেলপারদের জন্য একটি কার্যকরী এবং নমনীয় সমাধান প্রদান করে, যা আধুনিক সফটওয়্যার উন্নয়নের প্রয়োজনীয়তা মেটাতে সাহায্য করে।
FlatBuffers এর বিভিন্ন প্রোগ্রামিং ভাষায় সাপোর্ট
FlatBuffers একটি বহুমুখী ডেটা সিরিয়ালাইজেশন ফ্রেমওয়ার্ক যা বিভিন্ন প্রোগ্রামিং ভাষায় সমর্থিত। এটি ডেভেলপারদের জন্য বিভিন্ন পরিবেশ এবং প্ল্যাটফর্মে ডেটা পরিচালনা করা সহজ করে তোলে। নিচে FlatBuffers-এর দ্বারা সমর্থিত প্রধান প্রোগ্রামিং ভাষাগুলির তালিকা এবং তাদের সংক্ষিপ্ত বর্ণনা দেওয়া হলো।
১. C++
- বর্ণনা: FlatBuffers-এর মূল সমর্থন C++ তে রয়েছে। C++ এর মাধ্যমে ডেটা তৈরি, সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা সহজ।
- ব্যবহার: গেম ডেভেলপমেন্ট এবং উচ্চ কার্যক্ষমতা সম্পন্ন অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত।
২. Java
- বর্ণনা: Android অ্যাপ্লিকেশন এবং Java ভিত্তিক সার্ভার সাইড ডেভেলপমেন্টে ব্যবহৃত হয়।
- ব্যবহার: মোবাইল অ্যাপ্লিকেশন এবং বড় স্কেলের সার্ভার সাইড সিস্টেমের জন্য কার্যকর।
৩. Python
- বর্ণনা: Python FlatBuffers ব্যবহার করে সহজে ডেটা পরিচালনা করতে পারে।
- ব্যবহার: ডেটা বিজ্ঞান এবং মেশিন লার্নিং প্রজেক্টে জনপ্রিয়।
৪. Go
- বর্ণনা: Go প্রোগ্রামিং ভাষায় FlatBuffers ব্যবহার করা যায় যা দ্রুত সার্ভার এবং ক্লায়েন্ট সাইড অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।
- ব্যবহার: ক্লাউড-নেটিভ এবং মাইক্রোসার্ভিস আর্কিটেকচার জন্য উপযুক্ত।
৫. JavaScript
- বর্ণনা: ব্রাউজার এবং Node.js পরিবেশে FlatBuffers ব্যবহার করা যায়।
- ব্যবহার: ওয়েব অ্যাপ্লিকেশন এবং রিয়েল-টাইম ডেটা ব্যবহারের জন্য কার্যকর।
৬. C#
- বর্ণনা: C# ডেভেলপমেন্টে, বিশেষ করে Unity গেম ইঞ্জিনে FlatBuffers ব্যবহার করা হয়।
- ব্যবহার: গেম ডেভেলপমেন্ট এবং Windows ভিত্তিক অ্যাপ্লিকেশনের জন্য উপযুক্ত।
৭. Ruby
- বর্ণনা: Ruby এ FlatBuffers লাইব্রেরি ব্যবহার করে ডেটা পরিচালনা করা যায়।
- ব্যবহার: ওয়েব অ্যাপ্লিকেশন এবং স্ক্রিপ্টিংয়ের জন্য উপযোগী।
৮. PHP
- বর্ণনা: PHP ব্যবহারকারীরা FlatBuffers দিয়ে ডেটা পেতে এবং সেটি প্রক্রিয়া করতে পারেন।
- ব্যবহার: ব্যাকএন্ড সিস্টেম এবং ওয়েব ডেভেলপমেন্টে ব্যবহৃত।
৯. Dart
- বর্ণনা: Flutter অ্যাপ্লিকেশন ডেভেলপমেন্টে Dart ব্যবহারকারীরা FlatBuffers ব্যবহার করতে পারেন।
- ব্যবহার: মোবাইল এবং ওয়েব অ্যাপ্লিকেশন উন্নয়নে কার্যকর।
১০. Kotlin
- বর্ণনা: Android ডেভেলপমেন্টে Kotlin ব্যবহারকারীরা FlatBuffers দিয়ে ডেটা পরিচালনা করতে পারেন।
- ব্যবহার: আধুনিক Android অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য উপযুক্ত।
সারসংক্ষেপ
FlatBuffers বিভিন্ন প্রোগ্রামিং ভাষায় সমর্থিত হওয়ার কারণে এটি ডেভেলপারদের জন্য বহুমুখী এবং সুবিধাজনক একটি টুল। এর ফলে, গেম ডেভেলপমেন্ট, মোবাইল অ্যাপ্লিকেশন, সার্ভার সাইড ডেভেলপমেন্ট, এবং অন্যান্য বিভিন্ন প্ল্যাটফর্মে এটি কার্যকরভাবে ব্যবহৃত হতে পারে। FlatBuffers এর বিভিন্ন ভাষায় ব্যবহার করা হলে, ডেটা সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া দ্রুত এবং কার্যকর হয়, যা প্রজেক্টের পারফরম্যান্স বৃদ্ধি করে।
C++, Java, Python, এবং JavaScript এ FlatBuffers ব্যবহার
FlatBuffers একটি উচ্চ কার্যক্ষমতা সম্পন্ন ডেটা সিরিয়ালাইজেশন টুল যা বিভিন্ন প্রোগ্রামিং ভাষায় ব্যবহার করা যায়। নিচে C++, Java, Python, এবং JavaScript এ FlatBuffers কিভাবে ব্যবহার করতে হয় তার একটি সংক্ষিপ্ত নির্দেশিকা দেওয়া হলো।
১. C++ এ FlatBuffers ব্যবহার
১.১. Schema তৈরি
monster.fbs ফাইল তৈরি করুন:
namespace MyGame.Sample;
table Monster {
id: int;
name: string;
health: float;
inventory: [string];
}
root_type Monster;
১.২. কম্পাইল করা
flatc --cpp monster.fbs
১.৩. C++ কোড
#include "monster_generated.h" // উৎপন্ন FlatBuffers ফাইল
#include <iostream>
#include <fstream>
using namespace MyGame::Sample;
void serializeData() {
flatbuffers::FlatBufferBuilder builder;
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();
}
void deserializeData() {
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;
}
int main() {
serializeData();
deserializeData();
return 0;
}
২. Java এ FlatBuffers ব্যবহার
২.১. Schema তৈরি
monster.fbs ফাইল তৈরি করুন (একই ফাইল ব্যবহার করুন)।
২.২. কম্পাইল করা
flatc --java monster.fbs
২.৩. Java কোড
import com.google.flatbuffers.FlatBufferBuilder;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) throws Exception {
FlatBufferBuilder builder = new FlatBufferBuilder(1024);
int name = builder.createString("Orc");
int[] inventoryItems = {builder.createString("Sword"), builder.createString("Axe")};
int inventory = Monster.createInventoryVector(builder, inventoryItems);
Monster.startMonster(builder);
Monster.addId(builder, 1);
Monster.addName(builder, name);
Monster.addHealth(builder, 100.0f);
Monster.addInventory(builder, inventory);
int orc = Monster.endMonster(builder);
builder.finish(orc);
// Serialize to file
Files.write(Paths.get("monster_data.bin"), builder.sizedByteArray());
// Deserialize from file
byte[] bytes = Files.readAllBytes(Paths.get("monster_data.bin"));
Monster monster = Monster.getRootAsMonster(new FlatBufferBuilder().createBuffer(bytes));
System.out.println("Monster ID: " + monster.id() + ", Name: " + monster.name() + ", Health: " + monster.health());
}
}
৩. Python এ FlatBuffers ব্যবহার
৩.১. Schema তৈরি
monster.fbs ফাইল তৈরি করুন (একই ফাইল ব্যবহার করুন)।
৩.২. কম্পাইল করা
flatc --python monster.fbs
৩.৩. Python কোড
import flatbuffers
from monster import Monster
def serialize_data():
builder = flatbuffers.FlatBufferBuilder(1024)
name = builder.CreateString("Orc")
inventory = builder.CreateVector([builder.CreateString("Sword"), builder.CreateString("Axe")])
MonsterStart(builder)
MonsterAddId(builder, 1)
MonsterAddName(builder, name)
MonsterAddHealth(builder, 100.0)
MonsterAddInventory(builder, inventory)
orc = MonsterEnd(builder)
builder.Finish(orc)
# Serialize to file
with open("monster_data.bin", "wb") as f:
f.write(builder.Output())
def deserialize_data():
with open("monster_data.bin", "rb") as f:
buf = f.read()
monster = Monster.GetRootAsMonster(buf, 0)
print(f"Monster ID: {monster.Id()}, Name: {monster.Name().decode('utf-8')}, Health: {monster.Health()}")
if __name__ == "__main__":
serialize_data()
deserialize_data()
৪. JavaScript এ FlatBuffers ব্যবহার
৪.১. Schema তৈরি
monster.fbs ফাইল তৈরি করুন (একই ফাইল ব্যবহার করুন)।
৪.২. কম্পাইল করা
flatc --js monster.fbs
৪.৩. JavaScript কোড
const fs = require('fs');
const flatbuffers = require('flatbuffers').flatbuffers;
const { Monster } = require('./monster_generated'); // উৎপন্ন FlatBuffers ফাইল
function serializeData() {
const builder = new flatbuffers.FlatBufferBuilder(1024);
const name = builder.createString("Orc");
const inventory = Monster.createInventoryVector(builder, [builder.createString("Sword"), builder.createString("Axe")]);
Monster.startMonster(builder);
Monster.addId(builder, 1);
Monster.addName(builder, name);
Monster.addHealth(builder, 100.0);
Monster.addInventory(builder, inventory);
const orc = Monster.endMonster(builder);
builder.finish(orc);
// Serialize to file
fs.writeFileSync('monster_data.bin', Buffer.from(builder.asUint8Array()));
}
function deserializeData() {
const buffer = fs.readFileSync('monster_data.bin');
const monster = Monster.getRootAsMonster(new flatbuffers.ByteBuffer(new Uint8Array(buffer)));
console.log(`Monster ID: ${monster.id()}, Name: ${monster.name()}, Health: ${monster.health()}`);
}
serializeData();
deserializeData();
সারসংক্ষেপ
- C++: FlatBuffers ব্যবহার করে ডেটা তৈরি এবং বাইনারি ফাইলে সংরক্ষণ করা হয়।
- Java: Android এবং Java অ্যাপ্লিকেশনের জন্য FlatBuffers ব্যবহার করে ডেটা পরিচালনা করা হয়।
- Python: Python স্ক্রিপ্ট ব্যবহার করে FlatBuffers ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হয়।
- JavaScript: Node.js ব্যবহার করে FlatBuffers ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হয়।
FlatBuffers বিভিন্ন ভাষায় সমর্থন প্রদান করে, যা ডেভেলপারদের জন্য বহুমুখী এবং সুবিধাজনক টুল তৈরি করে।
FlatBuffers এ ডেটা মডেলিংয়ের জন্য একটি স্কিমা ফাইল ব্যবহার করা হয়, যা থেকে বিভিন্ন প্রোগ্রামিং ভাষায় কোড জেনারেট করা হয়। FlatBuffers Compiler (flatc) ব্যবহার করে স্কিমা থেকে কোড জেনারেট করা যায়, যা বিভিন্ন ভাষার জন্য সাপোর্ট করে। এই প্রক্রিয়াটি স্কিমা ফাইলের ভিতরে সংজ্ঞায়িত ডেটা কাঠামোকে বিভিন্ন ভাষায় ব্যবহারের জন্য প্রস্তুত করে।
Schema থেকে Code Generation
FlatBuffers এর স্কিমা ফাইল (যেমন monster.fbs) থেকে কোড জেনারেট করার প্রক্রিয়া নিচে দেওয়া হলো:
১. স্কিমা ফাইল তৈরি করা
প্রথমে একটি FlatBuffers স্কিমা ফাইল তৈরি করুন, উদাহরণস্বরূপ, monster.fbs:
namespace Game;
table Monster {
name: string; // মনস্টারের নাম
hp: int; // স্বাস্থ্য পয়েন্ট
mana: int; // ম্যানা পয়েন্ট
}
root_type Monster;
২. FlatBuffers Compiler (flatc) ইনস্টল করা
FlatBuffers Compiler ইনস্টল করা হলে, এটি নিশ্চিত করুন যে আপনার সিস্টেমে flatc কমান্ডটি উপলব্ধ।
৩. কোড জেনারেট করা
এখন বিভিন্ন ভাষায় কোড জেনারেট করার জন্য flatc কমান্ড ব্যবহার করুন। নিচে বিভিন্ন ভাষার জন্য কোড জেনারেট করার উদাহরণ দেওয়া হলো:
bash
Copy code
flatc --cpp --java --python --csharp --go --js monster.fbs
এই কমান্ডটি C++, Java, Python, C#, Go, এবং JavaScript এর জন্য কোড তৈরি করবে।
Language Bindings
FlatBuffers বিভিন্ন ভাষার জন্য bindings প্রদান করে, যা ডেভেলপারদের FlatBuffers ব্যবহার করতে সহজ করে। নীচে কিছু জনপ্রিয় ভাষার জন্য bindings উল্লেখ করা হলো:
C++:
- FlatBuffers C++ এর জন্য দ্রুত এবং কার্যকরী। এটি গেমিং ইঞ্জিন এবং অন্যান্য উচ্চ পারফরম্যান্স অ্যাপ্লিকেশনে ব্যবহৃত হয়।
Java:
- Android অ্যাপ্লিকেশন এবং Java ভিত্তিক সিস্টেমের জন্য ব্যবহৃত হয়। JSON এবং XML এর তুলনায় এটি দ্রুত এবং কার্যকরী।
Python:
- স্ক্রিপ্টিং এবং ডেটা বিশ্লেষণের জন্য ব্যবহৃত হয়। Python ডেভেলপারদের জন্য FlatBuffers ব্যবহার করা সহজ।
C#:
- Windows এবং .NET ভিত্তিক অ্যাপ্লিকেশনগুলির জন্য উপযোগী।
Go:
- ক্লাউড সেবাগুলির জন্য আদর্শ, যেখানে উচ্চ পারফরম্যান্স এবং দ্রুততা প্রয়োজন।
JavaScript:
- ওয়েব অ্যাপ্লিকেশন এবং ক্লায়েন্ট-সার্ভার যোগাযোগে ব্যবহৃত হয়।
Rust:
- নিরাপত্তা এবং কর্মক্ষমতার জন্য জনপ্রিয়, FlatBuffers Rust প্রোজেক্টগুলিতে ব্যবহৃত হতে পারে।
উদাহরণ: FlatBuffers থেকে কোড জেনারেশন
ধরি, আপনার monster.fbs ফাইলের মাধ্যমে কোড জেনারেট হয়েছে। আপনি C++ এ FlatBuffers ব্যবহার করে ডেটা তৈরি ও ব্যবহারের জন্য নিচের কোড দেখতে পারেন:
C++ কোড উদাহরণ
#include "monster_generated.h" // FlatBuffers জেনারেটেড ফাইল
#include <iostream>
#include <fstream>
int main() {
// FlatBufferBuilder তৈরি করা
flatbuffers::FlatBufferBuilder builder;
// Monster তৈরি করা
auto name = builder.CreateString("Orc");
Game::MonsterBuilder monster_builder(builder);
monster_builder.add_name(name);
monster_builder.add_hp(100);
monster_builder.add_mana(50);
auto monster = monster_builder.Finish();
builder.Finish(monster);
// ডেটা ফাইল লেখার জন্য
std::ofstream output("monster.bin", std::ios::binary);
output.write(reinterpret_cast<const char*>(builder.GetBufferPointer()), builder.GetSize());
output.close();
std::cout << "Monster data saved!" << std::endl;
return 0;
}
উপসংহার
FlatBuffers থেকে কোড জেনারেট করার প্রক্রিয়া এবং মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট এটি একটি শক্তিশালী ডেটা সিরিয়ালাইজেশন ফরম্যাট করে তোলে। এটি বিভিন্ন ভাষায় ডেটার কার্যকরী ব্যবস্থাপনা নিশ্চিত করে এবং ডেভেলপারদের জন্য একটি নমনীয় সমাধান প্রদান করে। FlatBuffers এর মাধ্যমে বিভিন্ন প্ল্যাটফর্মে দ্রুত এবং কার্যকরী ডেটা স্থানান্তর করা সম্ভব, যা আধুনিক সফটওয়্যার উন্নয়নের জন্য অপরিহার্য।
FlatBuffers একটি কার্যকরী সিরিয়ালাইজেশন ফরম্যাট যা বিভিন্ন প্রোগ্রামিং ভাষায় সমর্থন করে। নিচে বিভিন্ন ভাষায় FlatBuffers এর ব্যবহার এবং উদাহরণ সহ বিবরণ দেওয়া হলো।
১. C++
স্কিমা ফাইল: monster.fbs
namespace Game;
table Monster {
name: string;
hp: int;
mana: int;
}
root_type Monster;
C++ কোড উদাহরণ
#include "monster_generated.h" // FlatBuffers জেনারেটেড ফাইল
#include <iostream>
#include <fstream>
int main() {
flatbuffers::FlatBufferBuilder builder;
auto name = builder.CreateString("Orc");
Game::MonsterBuilder monster_builder(builder);
monster_builder.add_name(name);
monster_builder.add_hp(100);
monster_builder.add_mana(50);
auto monster = monster_builder.Finish();
builder.Finish(monster);
// Write to file
std::ofstream output("monster.bin", std::ios::binary);
output.write(reinterpret_cast<const char*>(builder.GetBufferPointer()), builder.GetSize());
output.close();
std::cout << "Monster data saved!" << std::endl;
return 0;
}
২. Java
স্কিমা ফাইল: monster.fbs
(একই স্কিমা ফাইল ব্যবহার করুন)
Java কোড উদাহরণ
import com.google.flatbuffers.FlatBufferBuilder;
public class Main {
public static void main(String[] args) {
FlatBufferBuilder builder = new FlatBufferBuilder(1024);
int nameOffset = builder.createString("Orc");
Monster.startMonster(builder);
Monster.addName(builder, nameOffset);
Monster.addHp(builder, 100);
Monster.addMana(builder, 50);
int monster = Monster.endMonster(builder);
builder.finish(monster);
// Write to file
try (FileOutputStream fos = new FileOutputStream("monster.bin")) {
fos.write(builder.sizedByteArray());
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Monster data saved!");
}
}
৩. Python
স্কিমা ফাইল: monster.fbs
(একই স্কিমা ফাইল ব্যবহার করুন)
Python কোড উদাহরণ
import monster_pb2
def main():
monster = monster_pb2.Monster()
monster.name = "Orc"
monster.hp = 100
monster.mana = 50
# Serialize to binary
with open("monster.bin", "wb") as f:
f.write(monster.SerializeToString())
print("Monster data saved!")
if __name__ == "__main__":
main()
৪. C#
স্কিমা ফাইল: monster.fbs
(একই স্কিমা ফাইল ব্যবহার করুন)
C# কোড উদাহরণ
using FlatBuffers;
using System;
using System.IO;
class Program
{
static void Main()
{
var builder = new FlatBufferBuilder(1024);
var nameOffset = builder.CreateString("Orc");
Game.Monster.StartMonster(builder);
Game.Monster.AddName(builder, nameOffset);
Game.Monster.AddHp(builder, 100);
Game.Monster.AddMana(builder, 50);
var monster = Game.Monster.EndMonster(builder);
builder.Finish(monster.Value);
// Write to file
File.WriteAllBytes("monster.bin", builder.SizedByteArray());
Console.WriteLine("Monster data saved!");
}
}
৫. Go
স্কিমা ফাইল: monster.fbs
(একই স্কিমা ফাইল ব্যবহার করুন)
Go কোড উদাহরণ
package main
import (
"flatbuffers"
"io/ioutil"
"monster"
"log"
)
func main() {
builder := flatbuffers.NewBuilder(0)
name := builder.CreateString("Orc")
monster.StartMonster(builder)
monster.AddName(builder, name)
monster.AddHp(builder, 100)
monster.AddMana(builder, 50)
m := monster.EndMonster(builder)
builder.Finish(m)
// Write to file
if err := ioutil.WriteFile("monster.bin", builder.FinishedBytes(), 0644); err != nil {
log.Fatalf("failed writing to file: %s", err)
}
log.Println("Monster data saved!")
}
৬. JavaScript
স্কিমা ফাইল: monster.fbs
(একই স্কিমা ফাইল ব্যবহার করুন)
JavaScript কোড উদাহরণ
const fs = require('fs');
const flatbuffers = require('flatbuffers').flatbuffers;
const Monster = require('./monster_generated').Game.Monster;
function main() {
const builder = new flatbuffers.FlatBufferBuilder(1024);
const nameOffset = builder.createString("Orc");
Monster.startMonster(builder);
Monster.addName(builder, nameOffset);
Monster.addHp(builder, 100);
Monster.addMana(builder, 50);
const monster = Monster.endMonster(builder);
builder.finish(monster);
// Write to file
fs.writeFileSync("monster.bin", builder.asUint8Array());
console.log("Monster data saved!");
}
main();
উপসংহার
FlatBuffers বিভিন্ন প্রোগ্রামিং ভাষায় কার্যকরী ডেটা সিরিয়ালাইজেশন ও ডেসিরিয়ালাইজেশন সমর্থন করে। প্রতিটি ভাষায় কোড উদাহরণগুলি FlatBuffers এর সুবিধা এবং কার্যকারিতা তুলে ধরে, যা উন্নত পারফরম্যান্স এবং কম মেমরি ব্যবহারের জন্য উপযোগী। এটি গেমিং, মোবাইল অ্যাপ্লিকেশন, এবং রিয়েল-টাইম ডেটা প্রসেসিংয়ের মতো ক্ষেত্রে বিশেষভাবে কার্যকর।
Read more