Serialization এবং Externalizable জাভায় অবজেক্টের স্টেট সংরক্ষণ এবং পুনরুদ্ধারের জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ মেকানিজম। তবে, তাদের মধ্যে কিছু মূল পার্থক্য রয়েছে, যা তাদের ব্যবহারের ক্ষেত্রে প্রভাব ফেলে। চলুন বিস্তারিতভাবে দেখা যাক।
Serialization:
Serialization হল একটি প্রক্রিয়া যার মাধ্যমে একটি অবজেক্টকে একটি স্ট্রিমে রূপান্তরিত করা হয়, যাতে সেই অবজেক্টটি ফাইল সিস্টেমে সংরক্ষণ বা নেটওয়ার্কের মাধ্যমে ট্রান্সফার করা যায়। Serializable ইন্টারফেসটি Java এ serialization এর জন্য ব্যবহৃত হয়। অবজেক্টকে সিরিয়ালাইজ করার জন্য ক্লাসটিকে Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হয়।
Serialization এর প্রধান বৈশিষ্ট্য:
- Marker Interface:
Serializableএকটি marker interface, এর মধ্যে কোনো মেথড নেই। এটি শুধুমাত্র নির্দেশ দেয় যে অবজেক্টটি সিরিয়ালাইজ করা যাবে। - Automatic Serialization: Serialization ক্লাসের মধ্যে সব প্রপার্টি এবং অবজেক্টগুলিকে স্বয়ংক্রিয়ভাবে স্ট্রিমে রূপান্তরিত করে। তবে, আপনার নিজস্ব
writeObject()এবংreadObject()মেথড ব্যবহার করতে পারেন কিছু কাস্টমাইজেশন এর জন্য। - Performance: Serialization কিছুটা ধীর হতে পারে, কারণ এটি অবজেক্টের সমস্ত প্রপার্টি এবং অবজেক্ট সম্পর্কিত সব ডেটা সিরিয়ালাইজ করতে সময় নেয়।
Serialization উদাহরণ:
import java.io.*;
class Person implements Serializable {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class SerializationExample {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
out.writeObject(person); // Serialize the object
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Serialization complete.");
}
}
ব্যাখ্যা:
Personক্লাসেSerializableইন্টারফেস ইমপ্লিমেন্ট করা হয়েছে, যার ফলে অবজেক্টটি সিরিয়ালাইজ করা যাবে।ObjectOutputStreamব্যবহার করে অবজেক্টটিperson.serফাইলে সিরিয়ালাইজ করা হয়েছে।
Externalizable:
Externalizable হল java.io প্যাকেজের একটি ইন্টারফেস যা Serializable এর চেয়েও বেশি কাস্টমাইজেশন দেয়। এটি অবজেক্টের serialization এবং deserialization এর প্রক্রিয়া সম্পূর্ণ নিয়ন্ত্রণ করে, যেখানে আপনি ম্যানুয়ালি কনটেন্ট লিখতে এবং পড়তে পারেন।
Externalizable এর প্রধান বৈশিষ্ট্য:
- Custom Serialization:
Externalizableইন্টারফেস দুটি মেথড প্রদান করে:writeExternal()এবংreadExternal(), যা আপনাকে অবজেক্টের ডেটা কাস্টমাইজডভাবে লিখতে এবং পড়তে দেয়। - Control over Serialization:
ExternalizableআপনিSerializableএর তুলনায় অধিক কাস্টমাইজেশন করতে পারবেন। আপনি নির্দিষ্টভাবে কী কী ডেটা স্টোর করতে চান তা নির্ধারণ করতে পারবেন। - Performance: Externalizable সাধারণত
Serializableথেকে দ্রুত হতে পারে, কারণ আপনি প্রয়োজনীয় তথ্যই সিরিয়ালাইজ করতে পারেন এবং অব্যবহৃত ডেটা বাদ দিতে পারেন।
Externalizable উদাহরণ:
import java.io.*;
class Person implements Externalizable {
String name;
int age;
Person() {
// Default constructor is required
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(name); // Custom serialization
out.writeInt(age); // Custom serialization
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = (String) in.readObject(); // Custom deserialization
age = in.readInt(); // Custom deserialization
}
}
public class ExternalizableExample {
public static void main(String[] args) {
Person person = new Person("Bob", 25);
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person_ext.ser"))) {
out.writeObject(person); // Serialize the object using Externalizable
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Externalizable Serialization complete.");
}
}
ব্যাখ্যা:
Personক্লাসেExternalizableইন্টারফেস ইমপ্লিমেন্ট করা হয়েছে।writeExternal()এবংreadExternal()মেথডে ডেটা কাস্টমাইজডভাবে লেখার এবং পড়ার নিয়ন্ত্রণ প্রদান করা হয়েছে।
Serialization এবং Externalizable এর মধ্যে পার্থক্য
| দিক | Serialization | Externalizable |
|---|---|---|
| ইন্টারফেস | Serializable (Marker interface) | Externalizable (With writeExternal() and readExternal()) |
| কাস্টমাইজেশন | সীমিত কাস্টমাইজেশন | পূর্ণ কাস্টমাইজেশন, আপনি ডেটা লিখতে এবং পড়তে পারেন |
| ফাংশনালিটি | সব ডেটা স্বয়ংক্রিয়ভাবে সিরিয়ালাইজ হয় | ডেটা সঠিকভাবে এবং কাস্টমাইজডভাবে সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হয় |
| পারফরম্যান্স | সাধারণত ধীর হতে পারে | অধিক দ্রুত, কারণ আপনি ম্যানুয়ালি সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে পারেন |
| অবজেক্টের সংরক্ষণ | স্বয়ংক্রিয়ভাবে সমস্ত ফিল্ড সংরক্ষণ করা হয় | আপনি নির্দিষ্টভাবে কোন ফিল্ড সংরক্ষণ করবেন তা নিয়ন্ত্রণ করতে পারেন |
| বিকল্প | সহজ, তবে অনেক সময় অব্যবহৃত ডেটা সেভ হয় | বেশি নিয়ন্ত্রণ এবং কাস্টমাইজেশন, তবে কিছু অতিরিক্ত কোডিং প্রয়োজন |
কখন কোনটি ব্যবহার করবেন?
- Serialization:
- যখন আপনি ডেটার পুরো অবস্থা (অথবা সব ফিল্ড) সংরক্ষণ করতে চান এবং ডেটার প্রক্রিয়াকরণ বা কাস্টমাইজেশনের জন্য অতিরিক্ত কোড লিখতে চান না।
- Externalizable:
- যখন আপনি অবজেক্টের কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন পরিচালনা করতে চান এবং কিছু ফিল্ড বাদ দিতে চান, অথবা ফাইলের আকার ছোট রাখতে চান।
Serialization এবং Externalizable জাভাতে অবজেক্ট সংরক্ষণ এবং পুনরুদ্ধারের জন্য ব্যবহৃত দুটি প্রক্রিয়া। Serialization সাধারণভাবে সহজ এবং দ্রুত কার্যকর, কিন্তু সীমিত কাস্টমাইজেশন প্রদান করে। অন্যদিকে, Externalizable ব্যবহার করে আপনি অনেক বেশি নিয়ন্ত্রণ পেতে পারেন, তবে এটি আরও বেশি কোডিং এবং কাস্টমাইজেশন প্রয়োজন। আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুসারে এই দুটি পদ্ধতির মধ্যে যে কোনো একটি নির্বাচন করতে হবে।
Read more