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 বিভিন্ন ভাষায় সমর্থন প্রদান করে, যা ডেভেলপারদের জন্য বহুমুখী এবং সুবিধাজনক টুল তৈরি করে।
Content added By
Read more