Object Serialization এবং Deserialization Java এর একটি গুরুত্বপূর্ণ প্রক্রিয়া যা অবজেক্টগুলোকে স্টোর (বা ট্রান্সমিট) এবং পুনরুদ্ধার করতে ব্যবহৃত হয়। এই দুটি প্রক্রিয়া মূলত Java I/O (Input/Output) এর অংশ এবং এটি Java's Object Serialization API ব্যবহার করে সম্পাদিত হয়।
1. Object Serialization
Object Serialization হল একটি প্রক্রিয়া যার মাধ্যমে একটি অবজেক্টকে একটি বাইট স্ট্রিমে রূপান্তরিত করা হয়, যাতে সেই অবজেক্টটি ফাইল, ডাটাবেস বা নেটওয়ার্কে সংরক্ষণ বা পাঠানো সম্ভব হয়। এই প্রক্রিয়া মূলত একটি অবজেক্টকে byte stream এ রূপান্তরিত করে, যা পরে অন্য জায়গায় (যেমন ফাইল বা নেটওয়ার্ক) সংরক্ষণ করা যায়।
Object Serialization এর সুবিধা:
- Storage: অবজেক্টগুলিকে ফাইল বা ডাটাবেসে সংরক্ষণ করা।
- Communication: অবজেক্টগুলিকে নেটওয়ার্কের মাধ্যমে পাঠানো।
- Persistence: অবজেক্টের স্থায়িত্ব (long-term storage) নিশ্চিত করা।
Object Serialization এর জন্য কী করতে হয়:
- অবজেক্টের ক্লাসকে
Serializableইন্টারফেস ইমপ্লিমেন্ট করতে হবে। ObjectOutputStreamব্যবহার করে অবজেক্টটি স্টোর করতে হবে।
Example:
import java.io.*;
class Student implements Serializable {
String name;
int age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
}
public class SerializationExample {
public static void main(String[] args) {
Student student = new Student("John", 20);
try {
// Create an ObjectOutputStream to write the object
FileOutputStream fileOut = new FileOutputStream("student.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
// Serialize the student object
out.writeObject(student);
out.close();
fileOut.close();
System.out.println("Serialization completed!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- এখানে
Studentক্লাসটিSerializableইন্টারফেস ইমপ্লিমেন্ট করেছে, যার মাধ্যমে এটি সেরিয়ালাইজ করা যেতে পারে।
2. Object Deserialization
Object Deserialization হল একটি প্রক্রিয়া, যার মাধ্যমে একটি বাইট স্ট্রিম (যেটি পূর্বে সেরিয়ালাইজ করা হয়েছে) আবার একটি অবজেক্টে রূপান্তরিত হয়। এটি মূলত ObjectInputStream ব্যবহার করে করা হয়।
Object Deserialization এর সুবিধা:
- Restoring State: অবজেক্টের পূর্বের অবস্থা পুনরুদ্ধার করা।
- Remote Communication: নেটওয়ার্ক থেকে অবজেক্ট গ্রহণ করা এবং পুনরুদ্ধার করা।
Object Deserialization এর জন্য কী করতে হয়:
ObjectInputStreamব্যবহার করে অবজেক্টটি পুনরুদ্ধার করতে হবে।
Example:
import java.io.*;
class Student implements Serializable {
String name;
int age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
}
public class DeserializationExample {
public static void main(String[] args) {
try {
// Create an ObjectInputStream to read the object
FileInputStream fileIn = new FileInputStream("student.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
// Deserialize the student object
Student student = (Student) in.readObject();
in.close();
fileIn.close();
// Output the deserialized object
System.out.println("Name: " + student.name);
System.out.println("Age: " + student.age);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
- এখানে,
student.serফাইল থেকে সেরিয়ালাইজড অবজেক্টকে ডেসিরিয়ালাইজ করে,Studentঅবজেক্টে রূপান্তর করা হয়েছে এবং তার মান প্রদর্শন করা হয়েছে।
Object Serialization এবং Deserialization এর মধ্যে পার্থক্য
| Feature | Serialization | Deserialization |
|---|---|---|
| Definition | Object কে byte stream এ রূপান্তর করা | Serialized byte stream কে Object এ রূপান্তর করা |
| Purpose | Object কে সংরক্ষণ বা পাঠানোর জন্য | Serialized object কে পুনরুদ্ধার করার জন্য |
| Process | ObjectOutputStream.writeObject() | ObjectInputStream.readObject() |
| Class Requirement | Class কে Serializable হতে হবে | Class কে Serializable হতে হবে |
| Usage | Data Storage, Data Transmission | Data Retrieval, Object Restoration |
Serializable Interface
Serializable একটি মার্কার ইন্টারফেস, অর্থাৎ এটি কোনো মেথড ডিক্লেয়ার করে না, তবে এটি ক্লাসকে serializable করে তোলে। এটি Java Object Serialization এর জন্য অপরিহার্য।
- যখন একটি ক্লাস
Serializableইন্টারফেস ইমপ্লিমেন্ট করে, তখন সেই ক্লাসের অবজেক্টকে সেরিয়ালাইজ বা ডেসিরিয়ালাইজ করা যায়।
Transient Keyword
কিছু সময় আপনি এমন ক্ষেত্র থাকতে পারেন যা অবজেক্ট সেরিয়ালাইজেশন প্রক্রিয়ায় অন্তর্ভুক্ত করতে চান না। এজন্য transient কীওয়ার্ড ব্যবহার করা হয়। এই কীওয়ার্ড দিয়ে চিহ্নিত ফিল্ডগুলো সেরিয়ালাইজেশন প্রক্রিয়ায় অন্তর্ভুক্ত হবে না।
Example:
class Employee implements Serializable {
String name;
transient int salary; // This will not be serialized
Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
}
- এখানে
salaryফিল্ডটিtransientহওয়ায় এটি সেরিয়ালাইজ হবে না।
Advantages of Serialization and Deserialization:
- Data Persistence: সেরিয়ালাইজেশন ডেটাকে ডাটাবেস বা ফাইলে দীর্ঘ সময়ের জন্য সংরক্ষণ করতে সাহায্য করে।
- Data Transmission: নেটওয়ার্ক বা ডিস্কের মাধ্যমে অবজেক্ট পাঠানো বা গ্রহণ করার জন্য সেরিয়ালাইজেশন ব্যবহার করা হয়।
- Cross-platform communication: Serialization এবং Deserialization এর মাধ্যমে একটি Java অ্যাপ্লিকেশন থেকে অন্য Java অ্যাপ্লিকেশনে ডেটা ট্রান্সফার করা যায়।
- Distributed Systems: সেরিয়ালাইজেশন ব্যবহৃত হয় ডিসট্রিবিউটেড সিস্টেমে (যেমন RMI বা Web Services) অবজেক্ট পাঠাতে।
Java তে Object Serialization এবং Deserialization হলো অবজেক্টগুলোকে byte stream এ রূপান্তরিত করে সংরক্ষণ বা পাঠানোর এবং পরে পুনরুদ্ধার করার প্রক্রিয়া। এটি ডেটার স্থায়িত্ব, ট্রান্সমিশন, এবং পুনরুদ্ধারের জন্য অপরিহার্য। Serializable ইন্টারফেস ব্যবহার করে অবজেক্টের সেরিয়ালাইজেশন এবং transient কীওয়ার্ড ব্যবহার করে অবজেক্টের কিছু ফিল্ড সেরিয়ালাইজেশন থেকে বাদ দেওয়া যায়।
Read more