Multi-language প্রোজেক্ট: Python এবং Java এ FlatBuffers এর ব্যবহার
FlatBuffers ব্যবহার করে একটি মাল্টি-ল্যাঙ্গুয়েজ প্রোজেক্ট তৈরি করা একটি চমৎকার উপায়, যা আপনাকে বিভিন্ন প্রোগ্রামিং ভাষায় FlatBuffers এর কার্যকারিতা বোঝাতে সহায়ক। নিচে একটি উদাহরণমূলক প্রোজেক্টের পরিকল্পনা এবং সংশ্লিষ্ট কোড উদাহরণ দেওয়া হলো, যেখানে Python এবং Java উভয় ভাষায় FlatBuffers ব্যবহার করা হবে।
প্রোজেক্টের পরিকল্পনা
১. Schema তৈরি করা
প্রথমে, একটি FlatBuffers স্কিমা তৈরি করতে হবে যা ডেটার কাঠামো এবং ফিল্ডগুলি সংজ্ঞায়িত করবে। উদাহরণস্বরূপ, আমরা একটি Player টেবিল তৈরি করব যা একজন খেলোয়াড়ের তথ্য ধারণ করবে।
player.fbs
namespace MyGame;
table Player {
id: int;
name: string;
health: float;
inventory: [string];
}
root_type Player;
২. Schema কম্পাইল করা
FlatBuffers কম্পাইলার (flatc) ব্যবহার করে স্কিমা ফাইলটি Python এবং Java উভয় ভাষায় কোডে রূপান্তর করুন।
flatc --java player.fbs
flatc --python player.fbs
৩. Python এ FlatBuffers ব্যবহার
৩.১. Python কোড উদাহরণ
import flatbuffers
from player import Player
def create_player():
builder = flatbuffers.FlatBufferBuilder(1024)
name = builder.CreateString("Hero")
inventory = builder.CreateVector([builder.CreateString("Sword"), builder.CreateString("Shield")])
Player.Start(builder)
Player.AddId(builder, 1)
Player.AddName(builder, name)
Player.AddHealth(builder, 100.0)
Player.AddInventory(builder, inventory)
player = Player.End(builder)
builder.Finish(player)
# Serialize to file
with open("player_data.bin", "wb") as f:
f.write(builder.Output())
def load_player():
with open("player_data.bin", "rb") as f:
buf = f.read()
player = Player.GetRootAsPlayer(buf, 0)
print(f"Player ID: {player.Id()}, Name: {player.Name().decode('utf-8')}, Health: {player.Health()}")
if __name__ == "__main__":
create_player()
load_player()
৪. Java এ FlatBuffers ব্যবহার
৪.১. 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);
// Create player
int name = builder.createString("Hero");
int[] inventoryItems = {builder.createString("Sword"), builder.createString("Shield")};
int inventory = Player.createInventoryVector(builder, inventoryItems);
Player.startPlayer(builder);
Player.addId(builder, 1);
Player.addName(builder, name);
Player.addHealth(builder, 100.0f);
Player.addInventory(builder, inventory);
int player = Player.endPlayer(builder);
builder.finish(player);
// Serialize to file
Files.write(Paths.get("player_data.bin"), builder.sizedByteArray());
// Deserialize from file
byte[] bytes = Files.readAllBytes(Paths.get("player_data.bin"));
Player playerObj = Player.getRootAsPlayer(new FlatBufferBuilder().createBuffer(bytes));
System.out.println("Player ID: " + playerObj.id() + ", Name: " + playerObj.name() + ", Health: " + playerObj.health());
}
}
৫. সারসংক্ষেপ
- Schema তৈরি: FlatBuffers স্কিমা ফাইল তৈরি করে ডেটার কাঠামো সংজ্ঞায়িত করা হয়েছে।
- Schema কম্পাইল করা: FlatBuffers কম্পাইলার ব্যবহার করে Python এবং Java উভয় ভাষায় কোড উৎপন্ন করা হয়েছে।
- Python কোড: FlatBuffers ব্যবহার করে একটি খেলোয়াড় তৈরি এবং ডেটা সংরক্ষণ করা হয়েছে।
- Java কোড: FlatBuffers ব্যবহার করে একই খেলোয়াড়ের তথ্য সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হয়েছে।
এই প্রোজেক্টের মাধ্যমে আপনি Python এবং Java উভয় ভাষায় FlatBuffers এর কার্যকারিতা উপলব্ধি করতে পারবেন এবং মাল্টি-ল্যাঙ্গুয়েজ ডেটা আদান-প্রদানের প্রক্রিয়া সম্পর্কে ধারণা পাবেন।
Read more