মোবাইল ডেভেলপমেন্টে ডেটা সিরিয়ালাইজেশন — এটি কী, ফরম্যাট এবং কাজের নীতি

লেখক: IT Sectr প্রকাশিত: 2026-03-08 পড়ার সময়: 8 মিনিট

সিরিয়ালাইজেশন হল একটি অবজেক্ট বা ডেটা গঠনকে একটি ধারাবাহিক ফরম্যাটে রূপান্তর করার প্রক্রিয়া যা নেটওয়ার্ক ডাটা প্রেরণ বা ফাইলে সংরক্ষণের জন্য উপযুক্ত। বিপরীত প্রক্রিয়া, ডিসিরিয়ালাইজেশন, ডেটাকে এর মূল অবস্থায় ফিরিয়ে আনে। MDN Web Docs অনুযায়ী, যে কোনো আন্তর্-প্রক্রিয়া যোগাযোগের জন্য সিরিয়ালাইজেশন অপরিহার্য। সিরিয়ালাইজেশন REST API, ক্যাচিং এবং অ্যাপলিকেশন উপাদানগুলির মধ্যে ডেটা আদানপ্রদানের ভিত্তি নির্মাণ করে।

মূখ্য বিষয়

  • সিরিয়ালাইজেশন — প্রেরণ বা সংরক্ষণের জন্য একটি অবজেক্টকে ডেটা স্ট্রিমে রূপান্তর করা
  • JSON — REST API এবং ওয়েব যোগাযোগের জন্য প্রধান টেক্সট ফরম্যাট
  • Protobuf — সর্বোচ্চ কার্যদক্ষতা এবং সংক্ষিপ্ততা সহ একটি বাইনারি ফরম্যাট
  • XML — এন্টারপ্রাইজ এবং Android ডেভেলপমেন্টের জন্য যাচাই সহ একটি কড়া ফরম্যাট
  • ফরম্যাট পছন্দ কার্যদক্ষতা এবং সামঞ্জস্যের প্রয়োজনীয়তার উপর নির্ভর করে

সিরিয়ালাইজেশন কী?

সিরিয়ালাইজেশন হল RAM-এ থাকা একটি অবজেক্টকে বাইট বা অক্ষরের একটি রৈখিক ধারায় রূপান্তর করার প্রক্রিয়া যা নেটওয়ার্কের উপর প্রেরণ, ফাইলে সংরক্ষণ বা অন্য প্রক্রিয়ায় পাঠানো যেতে পারে। সিরিয়ালাইজেশন ছাড়া, নেটওয়ার্ক যোগাযোগ, অবস্থা সংরক্ষণ এবং আন্তর্-প্রক্রিয়া মিথস্থাপন অসম্ভব হবে।

সিরিয়ালাইজেশনে দুটি বিপরীত প্রক্রিয়া অন্তর্ভুক্ত। সমমুখী প্রক্রিয়া (সিরিয়ালাইজেশন) ডেটাকে প্রেরণের জন্য ফরম্যাটে প্যাক করে। বিপরীত প্রক্রিয়া (ডিসিরিয়ালাইজেশন) ডেটাকে আবার অবজেক্টে ফিরিয়ে আনে। ডিসিরিয়ালাইজেশন নিরাপত্তার জন্য গুরুত্বপূর্ণ: ভুল ইনপুট ডেটা অ্যাপলিকেশনে দুর্বলতা সৃষ্টি করতে পারে।

মোবাইল অ্যাপলিকেশন ডেভেলপমেন্টে, সিরিয়ালাইজেশন সর্বত্র ব্যবহৃত হয়: সার্ভারে অনুরোধ পাঠানো এবং প্রতিসাদন প্রক্রিয়াকরণ, স্ক্রিন ঘূরনে অ্যাপলিকেশনের অবস্থা সংরক্ষণ, ডিস্কে ডেটা ক্যাচিং, এবং Intent (Android) বা Segue (iOS) ব্যবহার করে স্ক্রিনের মধ্যে ডেটা স্থানান্তর।

সিরিয়ালাইজেশনের প্রধান কাজ

  • নেটওয়ার্ক যোগাযোগ — ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা স্থানান্তর
  • অবস্থা সংরক্ষণ — অ্যাপলিকেশন ডেটা সংরক্ষণ এবং পুনরুদ্ধার
  • ক্যাচিং — অফলাইন অ্যাক্সেসের জন্য অনুরোধ ফলাফল সংরক্ষণ
  • ক্রস-প্লেটফর্ম — বিভিন্ন ভাষায় সিস্টেমের মধ্যে ডেটা বিনিময়
  • লগিং — লগে লেখার জন্য অবজেক্ট সিরিয়ালাইজেশন

প্রধান সিরিয়ালাইজেশন ফরম্যাট

সিরিয়ালাইজেশন ফরম্যাট গুলি টেক্সট এবং বাইনারিতে বিভক্ত। টেক্সট ফরম্যাট (JSON, XML) মানব-পঠনীয় এবং দেখার জন্য কোনো টুলের প্রয়োজন নেই। বাইনারি ফরম্যাট (Protobuf, FlatBuffers, MessagePack) আরও সংক্ষিপ্ত এবং দ্রুত কিন্তু ডিসিরিয়ালাইজেশন ছাড়া অপঠনীয়। ফরম্যাট পছন্দ কার্যদক্ষতা এবং ডিবাগিং সুবিধার মধ্যে একটি সমঝৌতা।

JSON, XML এবং Protobuf ছাড়াও, বিশেষায়িত ফরম্যাট রয়েছে: Google-এর FlatBuffers গেম্স এবং AR-এর জন্য, MessagePack — JSON-এর একটি সংক্ষিপ্ত বাইনারি বিকল্প, Apache-এর Avro Kafka-তে বিগ ডেটার জন্য, YAML — মন্তব্য সমর্থন সহ একটি কনফিগারেশন ফরম্যাট।

ফরম্যাট ধরন স্কিমা আকার গতি
JSON টেক্সট ঐচ্ছিক মধ্যম মধ্যম
XML টেক্সট XSD বড় কম
Protobuf বাইনারি বাধ্যবাধকমূলক ছোট উচ্চ
FlatBuffers বাইনারি বাধ্যবাধকমূলক ছোট সর্বোচ্চ
MessagePack বাইনারি না ছোট উচ্চ
Avro বাইনারি JSON Schema ছোট উচ্চ

মোবাইল ডেভেলপমেন্টে সিরিয়ালাইজেশন

মোবাইল প্লেটফর্মে সিরিয়ালাইজেশনযার নিজস্ব বৈশিষ্ট্য রয়েছে: সীমিত ট্রাফিক, দুর্বল প্রসেসর এবং স্ক্রিন ঘূরনে অবস্থা সংরক্ষণের প্রয়োজন। Android-এ Gson, Moshi, Kotlinx Serialization ব্যবহৃত হয়। iOS-এ — Codable, JSONSerialization, PropertyListEncoder। সঠিক লাইব্রেরি পছন্দ অ্যাপলিকেশনের কার্যদক্ষতাকে গুরুতরভাবে প্রভাবিত করে।

Kotlinx Serialization হল JetBrains-এর একটি আধুনিক লাইব্রেরি Kotlin Multiplatform Mobile-এর জন্য। এটি JSON, Protobuf, CBOR এবং কাস্টম ফরম্যাট সমর্থন করে। Kotlin Serialization প্লাগইনের মাধ্যমে কম্পাইল সময় কোড জেনারেশন হয়, যা রিফলেক্শন ব্যবহার না করে উচ্চ কার্যদক্ষতা নিশ্চিত করে।

Kotlinx Serialization (Kotlin Multiplatform)

Kotlinx Serialization লাইব্রেরি ক্লাসের জন্য @Serializable অ্যানোটেশন এবং সিরিয়ালাইজার জেনারেট করার জন্য একটি কম্পাইলার প্লাগইন ব্যবহার করে। এটি উচ্চ কার্যদক্ষতা এবং টাইপ নিরাপত্তা নিশ্চিত করে। ডিফল্ট ফরম্যাট হল JSON, কিন্তু অন্য ফরম্যাট অতিরিক্ত মডিউলের মাধ্যমে সমর্থিত।

kotlin
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString

@Serializable
data class Project(
    val id: Int,
    val name: String,
    val platforms: List<String>,
    val active: Boolean
)

val json = Json {
    prettyPrint = true
    ignoreUnknownKeys = true
    encodeDefaults = true
}

fun main() {
    val project = Project(1, "MobileApp",
        listOf("Android", "iOS"), true)

    // সিরিয়ালাইজেশন
    val jsonString = json.encodeToString(project)

    // ডিসিরিয়ালাইজেশন
    val restored = json.decodeFromString<Project>(jsonString)
}

iOS-এ Codable (Swift)

Codable প্রোটোকল হল Swift-এর বিল্ট-ইন সিরিয়ালাইজেশন প্রক্রিয়া। এটি Encodable (সিরিয়ালাইজেশন) এবং Decodable (ডিসিরিয়ালাইজেশন) প্রোটোকল একত্রিত করে। JSONEncoder এবং JSONDecoder স্বচালিতভাবে নেস্টেড গঠন, অ্যারে, অপশনাল মান এবং CodingKeys-এর মাধ্যমে কাস্টম কি হ্যান্ডল করে।

swift
import Foundation

struct AppConfig: Codable {
    let appName: String
    let version: String
    let features: [String]
    let isProduction: Bool
}

let config = AppConfig(
    appName: "MyApp",
    version: "2.1.0",
    features: ["push", "analytics", "offline"],
    isProduction: true
)

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]

guard let data = try? encoder.encode(config) else { return }
let jsonString = String(data: data, encoding: .utf8)

কার্যদক্ষতা এবং ফরম্যাট তুলনা

সিরিয়ালাইজেশন ফরম্যাটের কার্যদক্ষতা তিনটি মেট্রিক্সে মূল্যায়ন করা হয়: বার্তার আকার, সিরিয়ালাইজেশন গতি এবং ডিসিরিয়ালাইজেশন গতি। মোবাইল অ্যাপলিকেশনের জন্য, তিনটিই গুরুত্বপূর্ণ: আকার ট্রাফিক এবং লোড সময়কে প্রভাবিত করে, গতি ইন্টারফেসের প্রতিসাদশীলতা এবং অ্যাপলিকেশন শুরুর সময়কে প্রভাবিত করে।

Protobuf এবং FlatBuffers বাইনারি উপস্থাপনের কারণে সর্বোত্তম ফলাফল দেখায়। FlatBuffers আলাদা কারণ এটির একটি পৃথক ডিসিরিয়ালাইজেশন ধাপের প্রয়োজন নেই — ডেটা সরাসরি বাইনারি বাফার থেকে পড়া হয়, যা এটিকে সর্বনিম্ন বিলম্ব প্রয়োজনীয় গেম্স এবং AR অ্যাপলিকেশনের জন্য আদর্শ করে তোলে। JSON, খারাপ কার্যদক্ষতা সত্ত্বেও, সরলতা এবং সার্বত্রিকতার কারণে REST API-এর জন্য সবচেয়ে জনপ্রিয় ফরম্যাট রয়েছে।

পরিদৃশ্য সুপারিশিত ফরম্যাট কারণ
REST API JSON সার্বত্রিকতা, পঠনীয়তা, সমর্থন
মাইক্রোসার্ভিস Protobuf সংক্ষিপ্ততা, গতি, gRPC
গেম্স / AR FlatBuffers Zero-copy, সর্বনিম্ন বিলম্ব
বিগ ডেটা Avro Kafka এবং Hadoop-এর সাথে সামঞ্জস্য
কনফিগারেশন YAML মন্তব্য, পঠনীয়তা
Android লেআউট XML প্লেটফর্ম মানক

বেঞ্চমার্ক টেস্টিং

1000 ব্যবহারকারী অবজেক্টের একটি ডেটাসেটে ব্যাবহারিক পরীক্ষণ দেখায়: Protobuf 12 KB বার্তা তৈরি করে (JSON — 85 KB, XML — 120 KB)। সিরিয়ালাইজেশন সময়: Protobuf — 2 মিলিসেকেন্ড, JSON — 8 মিলিসেকেন্ড, XML — 25 মিলিসেকেন্ড। এই সংখ্যাগুলি বাইনারি ফরম্যাটগুলিকে উচ্চ-লোড সিস্টেম এবং সীমিত ট্রাফিক সহ মোবাইল অ্যাপলিকেশনের জন্য পছন্দসিদ্ধ করে তোলে।

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

উদাহরণ গুলি বিভিন্ন ফরম্যাটে একটি অবজেক্টের সিরিয়ালাইজেশন প্রদর্শন করে। এটি আকার এবং পঠনীয়তা দৃশ্যভাবে তুলনা করতে সাহায্য করে। একটি User অবজেক্টকে JSON, XML এবং Protobuf-এ সিরিয়ালাইজেন করা হবে — স্পষ্টভাবে দেখা যায় যে JSON, XML অপেক্ষা আরও সংক্ষিপ্ত, এবং Protobuf সবচেয়ে সংক্ষিপ্ত এবং অপঠনীয়।

একটি অবজেক্ট তিনটি ফরম্যাটে

JSON — সর্বনিম্ন সিনট্যাক্স, কোটেশনে কি, বিভিন্ন ধরনের মান। 80 অক্ষর নেয়। পঠনীয়তা উচ্চ, দৃশ্য গঠন পরিষ্কার। সেই API-এর জন্য উপযুক্ত যেখানে ডেভেলপমেন্ট এবং ডিবাগিং গতি গুরুত্বপূর্ণ।

XML — প্রতিটি উপাদান খোলা এবং বন্ধ করার ট্যাগে মুড়িয়ে থাকে। 150 অক্ষর নেয়। পঠনীয়তা মধ্যম, গঠন কড়া। ডকুমেন্ট ওয়ার্কফ্লো এবং XSD যাচাই প্রয়োজনীয় সিস্টেমের জন্য উপযুক্ত।

Protobuf — বাইনারি, এই ডেটার জন্য 32 বাইট। অপঠনীয় — দেখার জন্য ডিসিরিয়ালাইজেশন প্রয়োজন। সর্বনিম্ন আকার এটিকে উচ্চ-লোড সিস্টেম এবং মোবাইল অ্যাপলিকেশনের জন্য আদর্শ করে তোলে।

json
{
  "id": 42,
  "name": "IT Sectr",
  "email": "team@itsectr.com",
  "role": "admin",
  "active": true
}
xml
<user>
    <id>42</id>
    <name>IT Sectr</name>
    <email>team@itsectr.com</email>
    <role>admin</role>
    <active>true</active>
</user>

সিরিয়ালাইজেশনের সর্বোত্তম অভ্যাস

সর্বোত্তম অভ্যাস সাধারণ ভুল এড়াতে এবং প্রজেক্টের জন্য সঠিক সিরিয়ালাইজেশন কৌশল বাছার্তে সাহায্য করে। এই সুপারিশগুলি অনুসরণ করা কার্যদক্ষতা, নিরাপত্তা এবং কোড রক্ষণাবেক্ষণ উন্নত করে।

মোবাইল ডেভেলপমেন্টের জন্য সুপারিশ

  1. পরিদৃশ্য অনুযায়ী ফরম্যাট বাছুন — REST API-এর জন্য JSON, gRPC এবং মাইক্রোসার্ভিসের জন্য Protobuf
  2. Java Serializable এড়িয়ে চলুন — ধীর এবং অসুরক্ষিত প্রক্রিয়া, Kotlinx Serialization বা Moshi ব্যবহার করুন
  3. অজানা কি অগ্রাহ্য করুন — মডেলে অনুপস্থিত ফিল্ড স্কিপ করতে পার্সার কনফিগার করুন
  4. ডিসিরিয়ালাইজেন ডেটা ক্যাচ করুন — একটি ডেটা বারবার পার্স করা এড়িয়ে চলুন
  5. ইনপুট ডেটা যাচাই করুন — ডিসিরিয়ালাইজেশনের সময় সীমা এবং ধরন যাচাই করুন

নিরাপত্তা এবং সিরিয়ালাইজেশন

সিরিয়ালাইজেশন নিরাপত্তা একটি অত্যন্ত গুরুত্বপূর্ণ দিক, বিশেষ করে অবিশ্বস্ত উৎস থেকে ডাটা ডিসিরিয়ালাইজ করার সময়। ডিসিরিয়ালাইজেশন আক্রমণ রিমোট কোড এক্সিকিউশন (RCE) ডাকাতে পারে, যা ওয়েব এবং মোবাইল অ্যাপলিকেশনের একটি বিপদজনক দুর্বলতা। সবচেয়ে পরিচিত ঘটনাগুলি Java Serializable এবং Python pickle-এর সাথে সম্পর্কিত।

Protobuf এবং JSON-এর এমন আক্রমণের বিরুদ্ধে বিল্ট-ইন সুরক্ষা রয়েছে, কারণ তারা কেবল ডেটা নিয়ে কাজ করে, এলোচনাহীন অবজেক্ট নয়। অপরদিকে, Java Serializable classpath-এ উপলব্ধ যে কোনো ক্লাস পুনরুদ্ধার করতে পারে, যা বাহ্যিক উৎস থেকে ডেটা গ্রহণের জন্য বিপদজনক করে তোলে। Android-এ, স্ট্যান্ডার্ড Java Serialization-এর পরিবর্তে Kotlinx Serialization বা Moshi ব্যবহার করার পরামর্শ দেওয়া হয়।

অতিরিক্ত নিরাপত্তা ব্যবস্থা: ইনপুট ডেটার আকারের জন্য একটি সীমা নির্ধারণ করুন, ডিসিরিয়ালাইজেশনের পূর্বে স্কিমা যাচাই করুন, HTTP হেডার থেকে Content-Type কে বিশ্বাস করবেন না, অনুমত ক্লাসের জন্য একটি অলোলিস্ট ব্যবহার করুন। নিয়মিতভাবে সিরিয়ালাইজেশন লাইব্রেরি আপডেট করুন, কারণ দুর্বলতা নিয়মিতভাবে আবিষ্কার এবং সমাধান করা হয়।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

সিরিয়ালাইজেশন এবং মার্শালিং-এর মধ্যে পার্থক্য কী?

সিরিয়ালাইজেশন একটি অবজেক্টকে বাইট ক্রমে রূপান্তর করে, যেখানে মার্শালিং ধরন এবং গঠন সংরক্ষণ করে বিভিন্ন ঠিকানার মধ্যে ডেটা স্থানান্তর করে। মার্শালিং-এ সিরিয়ালাইজেশন একটি প্রক্রিয়ার অংশ হিসাবে অন্তর্ভুক্ত থাকে, কিন্তু এটি রিফারেন্স এনকোডিং এবং মেমরি ম্যানেজমেন্টও অন্তর্ভুক্ত করতে পারে।

কোন সিরিয়ালাইজেশন ফরম্যাট সর্বাধিক দ্রুত?

Google-এর FlatBuffers zero-copy ডিসিরিয়ালাইজেশনের কারণে সর্বোচ্চ গতি প্রদান করে — ডেটা রূপান্তর ছাড়াই সরাসরি বাইনারি বাফার থেকে পড়া হয়। Protobuf দ্বিতীয় স্থানে, JSON তৃতীয় স্থানে। XML সাধারণ ফরম্যাটগুলির মধ্যে সবচেয়ে ধীর।

Android-এর জন্য কী বাছবেন: Gson, Moshi বা Kotlinx Serialization?

Kotlinx Serialization Kotlin-এ নতুন প্রজেক্টের জন্য সর্বোত্তম পছন্দ: কম্পাইলার জেনারেশন, Kotlin Multiplatform সমর্থন, null safety। Moshi Java প্রজেক্টের জন্য একটি ভাল পছন্দ, Gson অপেক্ষা আরও কার্যদক্ষ। Gson শুরু করার জন্য সবচেয়ে সরল লাইব্রেরি কিন্তু ধীর এবং রিফলেক্শন ব্যবহার করে।

চক্রিয় রিফারেন্স সহ একটি অবজেক্ট কিভাবে সিরিয়ালাইজ করবেন?

চক্রিয় রিফারেন্স সিরিয়ালাইজেশনের সময় অসীম পুনরাবৃত্তি সৃষ্টি করে। সমাধান: সরাসরি অবজেক্ট রিফারেন্সের পরিবর্তে ID রিফারেন্স ব্যবহার করুন, বিশেষ সিরিয়ালাইজেশন অডাপ্টার প্রয়োগ করুন (যেমন Jackson-এ @JsonIgnore), বা চক্র দূর করতে ডেটা মডেল পুনর্নির্মাণ করুন।

সিরিয়ালাইজেশন কি অ্যাপলিকেশন নিরাপত্তাকে প্রভাবিত করে?

হ্যাঁ, বিশেষ করে অবিশ্বস্ত ডেটার ডিসিরিয়ালাইজেশন। ডিসিরিয়ালাইজেশন দুর্বলতা রিমোট কোড এক্সিকিউশনের কারণ হতে পারে। সুপারিশ: অবিশ্বস্ত উৎস থেকে ডেটা ডিসিরিয়ালাইজ করবেন না, ডিসিরিয়ালাইজেশনের সময় ক্লাসের একটি অলোলিস্ট ব্যবহার করুন এবং প্রক্রিয়াকরণের আগে ডেটা স্কিমা যাচাই করুন।

সারাংশ

  • সিরিয়ালাইজেশন অবজেক্টকে প্রেরণ এবং সংরক্ষণের জন্য ডেটা স্ট্রিমে রূপান্তর করে, ডিসিরিয়ালাইজেশন সেগুলিকে পুনরুদ্ধার করে
  • JSON REST API-এর জন্য মানক, XML ডকুমেন্ট ওয়ার্কফ্লোর জন্য, Protobuf মাইক্রোসার্ভিস এবং উচ্চ-লোডের জন্য
  • বাইনারি ফরম্যাট (Protobuf, FlatBuffers) টেক্সট ফরম্যাটের চেয়ে 3–10 গুণ আরও সংক্ষিপ্ত এবং দ্রুত
  • Android-এ Kotlinx Serialization সুপারিশিত, iOS-এ — বিল্ট-ইন Codable
  • ডিসিরিয়ালাইজেন ডেটা ক্যাচিং CPU লোড হ্রাস করে এবং অ্যাপলিকেশন দ্রুত করে
  • ডিসিরিয়ালাইজেশন নিরাপত্তা গুরুত্বপূর্ণ — ইনপুট ডেটা যাচাই করুন এবং অলোলিস্ট ব্যবহার করুন
  • ফরম্যাট পছন্দ পঠনীয়তা, কার্যদক্ষতা এবং সামঞ্জস্যের মধ্যে একটি সমঝগুজারি

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন