Object Serialization এবং Deserialization এর ধারণা

ObjectInputStream এবং ObjectOutputStream - জাভা আইও (Java.io Package) - Java Technologies

332

Object Serialization এবং Deserialization Java-র Java.io প্যাকেজের একটি গুরুত্বপূর্ণ অংশ, যা অবজেক্টকে ফাইল বা নেটওয়ার্কের মাধ্যমে স্ট্রিমে রূপান্তর এবং পুনরুদ্ধার করতে ব্যবহৃত হয়। এটি Java-তে অবজেক্টের ডেটা সংরক্ষণ এবং স্থানান্তর করার জন্য ব্যবহৃত হয়। এই প্রযুক্তিটি data persistence, caching, এবং distributed applications এর জন্য গুরুত্বপূর্ণ।


Object Serialization এর ধারণা:

Serialization হল একটি প্রক্রিয়া যার মাধ্যমে Java object কে একটি byte stream (বাইনারি ডেটা) এ রূপান্তর করা হয়। এই প্রক্রিয়া অবজেক্টটির স্টেট (অথবা তার সমস্ত ফিল্ড এবং তার মান) একটি স্ট্রিমে লেখা হয়, যাতে তা সহজে ফাইল বা নেটওয়ার্কের মাধ্যমে সংরক্ষণ বা পাঠানো যায়। এর মাধ্যমে অবজেক্টের তথ্য অন্যান্য সিস্টেমে স্থানান্তর বা পুনরুদ্ধার করা সহজ হয়।

  • ObjectOutputStream ক্লাস Serialization এর জন্য ব্যবহৃত হয়, যা অবজেক্টকে স্ট্রিমে লেখে।
  • Serializable ইন্টারফেস হল একটি ট্যাগ ইন্টারফেস যা অবজেক্টকে সেরিয়ালাইজ করতে সক্ষম করে।

Serializable ইন্টারফেস:

  • Serializable একটি মার্কার ইন্টারফেস যা Java অবজেক্টকে সেরিয়ালাইজ করার জন্য ব্যবহৃত হয়। এটি কোনো মেথড ডিফাইন করে না, তবে এটি Java VM কে জানায় যে এই ক্লাসের অবজেক্টগুলিকে সেরিয়ালাইজ করা যাবে।

Object Deserialization এর ধারণা:

Deserialization হল Serialization এর বিপরীত প্রক্রিয়া। এটি স্ট্রিম থেকে অবজেক্টের ডেটা পড়ে এবং পুনরুদ্ধার করে একটি বাস্তব অবজেক্ট তৈরি করে। ডেটা যখন স্ট্রিম থেকে deserialize করা হয়, তখন মূল অবজেক্টের সকল ফিল্ড তার পূর্ববর্তী মান সহ পুনরুদ্ধার হয়।

  • ObjectInputStream ক্লাস Deserialization এর জন্য ব্যবহৃত হয়, যা স্ট্রিম থেকে অবজেক্টটি পড়ে এবং পুনরুদ্ধার করে।

Object Serialization এবং Deserialization এর উদাহরণ

1. Object Serialization উদাহরণ:

import java.io.*;

class Person implements Serializable {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class SerializationExample {
    public static void main(String[] args) {
        Person person = new Person("John", 25);

        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            oos.writeObject(person); // অবজেক্ট সেরিয়ালাইজ করা
            System.out.println("Object serialized to person.ser");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • Person ক্লাসকে Serializable ইন্টারফেস ইমপ্লিমেন্ট করার মাধ্যমে অবজেক্টটি সেরিয়ালাইজযোগ্য করা হয়েছে।
  • ObjectOutputStream ব্যবহার করে person অবজেক্টটি person.ser ফাইলে সেরিয়ালাইজ করা হচ্ছে।

আউটপুট:

Object serialized to person.ser

2. Object Deserialization উদাহরণ:

import java.io.*;

class Person implements Serializable {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class DeserializationExample {
    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
            Person person = (Person) ois.readObject(); // অবজেক্ট ডেসিরিয়ালাইজ করা
            System.out.println("Object deserialized: ");
            System.out.println("Name: " + person.name);
            System.out.println("Age: " + person.age);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • ObjectInputStream ব্যবহার করে person.ser ফাইল থেকে অবজেক্টটি ডেসিরিয়ালাইজ করা হচ্ছে।
  • Person অবজেক্টটি আবার name এবং age ফিল্ড সহ পুনরুদ্ধার করা হচ্ছে।

আউটপুট (যদি person.ser ফাইলটি থাকে):

Object deserialized: 
Name: John
Age: 25

Object Serialization এবং Deserialization এর সুবিধা এবং সীমাবদ্ধতা

সুবিধা:

  1. Data Persistence:
    • অবজেক্টকে স্ট্রিমে সেরিয়ালাইজ করার মাধ্যমে আপনি অবজেক্টের স্টেট দীর্ঘ সময় ধরে সংরক্ষণ করতে পারবেন এবং পরে ডেসিরিয়ালাইজ করে পুনরুদ্ধার করতে পারবেন।
  2. Object Communication:
    • নেটওয়ার্কের মাধ্যমে অবজেক্ট প্রেরণ করতে সহজ হয়। উদাহরণস্বরূপ, একটি ক্লায়েন্ট সার্ভার আর্কিটেকচারেও অবজেক্ট পাঠানো এবং গ্রহণ করা যায়।
  3. Cross-System Communication:
    • Serialization এবং Deserialization প্রক্রিয়া সিস্টেমের মধ্যে ডেটা আদান-প্রদান করার জন্য উপকারী।

সীমাবদ্ধতা:

  1. Versioning Issue:
    • যদি একটি ক্লাসের ফিল্ড পরিবর্তিত হয়, তাহলে পূর্বে সেরিয়ালাইজ করা অবজেক্টগুলি সঠিকভাবে ডেসিরিয়ালাইজ করা নাও যেতে পারে।
  2. Non-Serializable Objects:
    • যদি ক্লাসের কোনো ফিল্ড Serializable না হয়, তবে সেই অবজেক্টটি সেরিয়ালাইজ করা যাবে না। তবে transient কীওয়ার্ড ব্যবহার করে সেই ফিল্ডটি Serialization থেকে বাদ দেওয়া যেতে পারে।
  3. Performance:
    • Serialization এবং Deserialization প্রক্রিয়া প্রায়ই time-consuming হতে পারে, বিশেষত বড় বা জটিল অবজেক্টগুলির জন্য।

  • Serialization এবং Deserialization Java-তে অবজেক্টের স্টেট সংরক্ষণ এবং স্থানান্তর করার জন্য অপরিহার্য প্রযুক্তি। এটি ObjectOutputStream এবং ObjectInputStream ব্যবহার করে Java অবজেক্টগুলি ফাইল বা নেটওয়ার্কে স্ট্রিম করা এবং পুনরুদ্ধার করা সম্ভব করে।
  • Serializable ইন্টারফেস একটি গুরুত্বপূর্ণ অংশ, যা Java অবজেক্টগুলিকে সেরিয়ালাইজযোগ্য করে তোলে। তবে, এই প্রযুক্তি ব্যবহারের সময় versioning এবং non-serializable fields সংক্রান্ত বিষয়গুলির প্রতি লক্ষ্য রাখা গুরুত্বপূর্ণ।
Content added By
Promotion

Are you sure to start over?

Loading...