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

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

375

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


Object Serialization এবং Deserialization এর প্রয়োজনীয়তা

  1. Data Persistence: অবজেক্টের স্টেট ডিস্কে সংরক্ষণ করে বা ডাটাবেসে রাখতে serialization ব্যবহার করা হয়।
  2. Network Communication: অবজেক্টের স্টেট নেটওয়ার্কের মাধ্যমে প্রেরণ করতে serialization ব্যবহৃত হয়।
  3. Inter-process Communication (IPC): একাধিক প্রক্রিয়ার মধ্যে অবজেক্ট ট্রান্সফার করতে serialization প্রয়োজন।

Object Serialization

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

১. Object Serialization উদাহরণ

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

class Person implements java.io.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;
    }
}

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

        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();
        }
    }
}

ব্যাখ্যা:

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

আউটপুট:

Serialized data is saved in person.ser

Object Deserialization

Deserialization হলো সিরিয়ালাইজ করা অবজেক্টকে তার মূল ফরম্যাটে রূপান্তরিত করা। এটি ObjectInputStream ব্যবহার করে করা হয়।

২. Object Deserialization উদাহরণ

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

public class ObjectDeserializationExample {
    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: ");
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

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

আউটপুট:

Deserialized Person: 
Name: Alice
Age: 30

Tuples ব্যবহার করে Serialization এবং Deserialization

আপনি যদি Tuples ব্যবহার করে ডেটা সেভ এবং লোড করতে চান, তবে Serialization এবং Deserialization এর প্রক্রিয়া একই থাকবে। তবে, এখানে আমরা Pair বা Triplet মতো Tuples ব্যবহার করে Object সেভ এবং লোড করব।

৩. Tuple Serialization উদাহরণ

import org.javatuples.Pair;
import java.io.*;

public class TupleSerializationExample {
    public static void main(String[] args) {
        Pair<String, Integer> personTuple = Pair.with("Bob", 40);

        try (FileOutputStream fileOut = new FileOutputStream("tuple.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {

            out.writeObject(personTuple); // Serialize Tuple
            System.out.println("Serialized Tuple data is saved in tuple.ser");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

৪. Tuple Deserialization উদাহরণ

import org.javatuples.Pair;
import java.io.*;

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

        try (FileInputStream fileIn = new FileInputStream("tuple.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {

            personTuple = (Pair<String, Integer>) in.readObject(); // Deserialize Tuple
            System.out.println("Deserialized Tuple: ");
            System.out.println("Name: " + personTuple.getValue0());
            System.out.println("Age: " + personTuple.getValue1());

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • Tuple অবজেক্টটি Serialization এবং Deserialization প্রক্রিয়ার মধ্যে একটি সাধারণ Pair হিসেবে সেভ এবং লোড করা হয়েছে।

আউটপুট:

Serialized Tuple data is saved in tuple.ser
Deserialized Tuple: 
Name: Bob
Age: 40

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

  1. Data Persistence: অবজেক্টের ডেটা সেভ এবং রিট্রিভ করা যায়।
  2. Network Communication: অবজেক্টগুলো নেটওয়ার্কের মাধ্যমে পাঠানো যায় (যেমন RMI, Sockets)।
  3. Database Storage: অবজেক্টের ডেটা ডাটাবেসে সেভ করা যায়।
  4. Cross-platform Compatibility: এক প্ল্যাটফর্ম থেকে আরেক প্ল্যাটফর্মে অবজেক্ট ট্রান্সফার করা যায়।

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

  1. Class Compatibility: ক্লাসের কোনও পরিবর্তন হলে, সিরিয়ালাইজড অবজেক্টের সাথে সমস্যা হতে পারে (যেমন, serialVersionUID মিসম্যাচ)।
  2. Large Objects: বড় অবজেক্ট সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার সময় মেমরি ও কর্মক্ষমতা কমে যেতে পারে।
  3. Non-Serializable Classes: যেসব ক্লাস Serializable ইন্টারফেস ইমপ্লিমেন্ট করে না, সেগুলোর অবজেক্ট সিরিয়ালাইজ করা যায় না।

Best Practices

  1. Use serialVersionUID: সিরিয়ালাইজেশন সমস্যা এড়ানোর জন্য প্রতিটি সিরিয়ালাইজেবল ক্লাসে serialVersionUID ফিল্ড ব্যবহার করুন।

    private static final long serialVersionUID = 1L;
    
  2. Transient Keyword: যদি কিছু ডেটা সিরিয়ালাইজ করতে না চান, তবে তা transient কিওয়ার্ড দিয়ে চিহ্নিত করুন।

    private transient int sensitiveData;
    
  3. Avoid Large Objects: বড় অবজেক্ট সিরিয়ালাইজ করার আগে তাদের আকার ছোট করার চেষ্টা করুন।

Serialization এবং Deserialization Java প্রোগ্রামিংয়ে গুরুত্বপূর্ণ টুল যা অবজেক্টের ডেটা সংরক্ষণ এবং ট্রান্সফার করতে ব্যবহৃত হয়। Tuples এর সাথে এই প্রক্রিয়া একত্রে ব্যবহার করলে আপনি সহজেই জাভা অবজেক্ট এবং ডেটা স্ট্রাকচার সেভ এবং রিট্রিভ করতে পারেন। Javatuples এর মাধ্যমে Pair, Triplet ইত্যাদি Tuples সহজে Serialization এবং Deserialization প্রক্রিয়ার মধ্যে ব্যবহার করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...