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

ObjectInputStream এবং ObjectOutputStream - জাভা টাপল (Java Tuples) - Java Technologies

350

Object Serialization এবং Deserialization হলো জাভা প্রোগ্রামিংয়ে অবজেক্টের ডেটা ফাইল বা স্ট্রিমে রূপান্তর এবং পরবর্তীতে সেই ডেটা পুনরুদ্ধার করার প্রক্রিয়া। Serialization অবজেক্টের স্টেট (অথবা ডেটা)কে বাইনারি বা অন্য ফরম্যাটে রূপান্তরিত করে সংরক্ষণ করে, যাতে সেটি সঞ্চিত করা এবং অন্যান্য সিস্টেমে প্রেরণ করা যায়। আর Deserialization হল সেই ডেটা আবার একটি অবজেক্টে রূপান্তর করা।


Object Serialization এবং Deserialization এর উদ্দেশ্য

  1. ডেটা সংরক্ষণ: অবজেক্টের স্টেট সংরক্ষণ করতে (ফাইল, ডেটাবেস ইত্যাদিতে) Serialization ব্যবহার করা হয়।
  2. ডেটা ট্রান্সমিশন: অবজেক্ট অন্য সার্ভারে প্রেরণ করা (যেমন RMI, Sockets) বা নেটওয়ার্কের মাধ্যমে ডেটা ট্রান্সফার করার জন্য Serialization ব্যবহার করা হয়।
  3. অস্থায়ী স্টোরেজ: সফটওয়্যার আপ্লিকেশন বন্ধ হয়ে যাওয়ার পরও ডেটা পুনরুদ্ধার করতে Serialization ব্যবহার করা হয়।

Serialization এর প্রক্রিয়া

Serialization প্রক্রিয়া অবজেক্টের সমস্ত ডেটা (ফিল্ড) স্ট্রিমে রূপান্তর করে। যেকোনো অবজেক্টকে Serialize করতে হলে Serializable ইন্টারফেসটি ইমপ্লিমেন্ট করতে হয়।

Serializable ইন্টারফেস

Serializable একটি Marker Interface (কোনো মেথড নেই) যা কম্পাইলারকে জানায় যে অবজেক্টটি সিরিয়ালাইজ করা যাবে।


Serialization উদাহরণ

import java.io.Serializable;

public class Person implements Serializable {
    private String name;
    private int age;

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

    // Getter methods
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

ব্যাখ্যা:

  • Person ক্লাসে Serializable ইন্টারফেস ইমপ্লিমেন্ট করা হয়েছে, যা বলছে যে এই ক্লাসের অবজেক্ট সিরিয়ালাইজ করা যাবে।

Object Serialization (ফাইলের মধ্যে অবজেক্ট সেভ করা)

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;

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

        try (FileOutputStream fileOut = new FileOutputStream("person.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(person);  // Serialize the object
            System.out.println("Serialized data is saved in person.ser");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • ObjectOutputStream ব্যবহার করে Person অবজেক্টটি একটি ফাইলে person.ser সেভ করা হয়েছে।
  • writeObject() মেথড অবজেক্টকে স্ট্রিমে রূপান্তর করে।

Deserialization (ফাইল থেকে অবজেক্ট পুনরুদ্ধার করা)

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;

public class DeserializationExample {
    public static void main(String[] args) {
        Person person = null;

        try (FileInputStream fileIn = new FileInputStream("person.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            person = (Person) in.readObject();  // Deserialize the object
            System.out.println("Deserialized Person: " + person);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

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

Serialization এবং Deserialization এর সুবিধা

  1. ডেটা স্টোরেজ:
    • অবজেক্টের স্টেটকে ফাইল বা ডেটাবেসে সেভ করা যায়।
  2. ডেটা ট্রান্সফার:
    • অবজেক্ট সহজে নেটওয়ার্কের মাধ্যমে প্রেরণ করা যায় (যেমন RMI, Sockets)।
  3. অস্থায়ী স্টোরেজ:
    • অ্যাপ্লিকেশন বন্ধ হলে ডেটা সেভ এবং পরে পুনরুদ্ধার করা সম্ভব।
  4. অপরিবর্তনীয় ডেটা:
    • Serialization অবজেক্টের ডেটা Immutable রাখে, যার ফলে ডেটা পরিবর্তন করার ঝুঁকি কমে।

Tuples এবং Serialization/Deserialization

Tuples ব্যবহার করে Serialization এবং Deserialization এ একাধিক ভ্যালু সঞ্চয় এবং পুনরুদ্ধার করা যায়। এটি ছোট এবং সোজা পথ দেয় যাতে ডেটার বিভিন্ন ভ্যালু একসাথে রাখা এবং পরে সেগুলোর পুনরুদ্ধার সহজ হয়।

Tuples ব্যবহার করে Serialization উদাহরণ

import org.javatuples.Pair;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;

public class TupleSerializationExample {
    public static void main(String[] args) {
        // Creating a Tuple
        Pair<String, Integer> personTuple = Pair.with("Alice", 25);

        try (FileOutputStream fileOut = new FileOutputStream("personTuple.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(personTuple);  // Serialize the Tuple
            System.out.println("Serialized Tuple data is saved in personTuple.ser");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Tuples ব্যবহার করে Deserialization উদাহরণ

import org.javatuples.Pair;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;

public class TupleDeserializationExample {
    public static void main(String[] args) {
        Pair<String, Integer> personTuple = null;

        try (FileInputStream fileIn = new FileInputStream("personTuple.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            personTuple = (Pair<String, Integer>) in.readObject();  // Deserialize the Tuple
            System.out.println("Deserialized Tuple: " + personTuple);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Best Practices for Serialization and Deserialization

  1. Serializable Interface:
    • শুধুমাত্র সেই ক্লাসগুলিকে Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে দিন যেগুলি সিরিয়ালাইজ হতে প্রয়োজন।
  2. Transient Keyword:

    • যদি কোনো ফিল্ড সিরিয়ালাইজ করতে না চান, তবে transient কিওয়ার্ড ব্যবহার করুন।
    private transient String password;
    
  3. Versioning:

    • অবজেক্টের সিরিয়ালাইজড ফর্মের জন্য serialVersionUID ব্যবহার করুন, যাতে ক্লাসের ভার্সন পরিবর্তন হলে সমস্যা না হয়।
    private static final long serialVersionUID = 1L;
    
  4. Security:
    • Deserialization এ নিরাপত্তার জন্য ObjectInputStream এর readObject() মেথডে নিরাপত্তা চেক যুক্ত করুন।
  5. Avoid Serialization for Sensitive Data:
    • সংবেদনশীল ডেটা যেমন পাসওয়ার্ড বা ক্রেডেনশিয়াল সিরিয়ালাইজেশন থেকে বাদ দিন।

Object Serialization এবং Deserialization জাভাতে অবজেক্টের স্টেট সেভ এবং পুনরুদ্ধার করতে ব্যবহৃত হয়। Javatuples এর সাহায্যে এই ডেটা খুব সহজভাবে সংরক্ষণ এবং পুনরুদ্ধার করা যায়। Tuples এর মাধ্যমে একাধিক ভ্যালু একসাথে সঞ্চয় এবং পুনরুদ্ধার করা যায়, যা কোডের সরলতা এবং কার্যকারিতা বাড়ায়।

Content added By
Promotion

Are you sure to start over?

Loading...