Java I/O প্যাকেজে Serialization এবং Externalizable দুটি খুব গুরুত্বপূর্ণ প্রযুক্তি যা object persistence এবং object transmission (অবজেক্টের স্থায়িত্ব এবং স্থানান্তর) এর জন্য ব্যবহৃত হয়। এটি সাধারণত Java objects কে byte streams-এ রূপান্তর করতে সহায়ক, যাতে এগুলিকে ফাইল সিস্টেমে সংরক্ষণ করা যায় বা নেটওয়ার্কের মাধ্যমে পাঠানো যায়।
Serialization:
Serialization হল একটি প্রক্রিয়া যার মাধ্যমে Java objects-কে byte stream (বাইটের ধারায়) রূপান্তরিত করা হয় যাতে এগুলিকে ফাইল সিস্টেমে সংরক্ষণ বা নেটওয়ার্কে পাঠানো যায়। এবং Deserialization হল অবজেক্টের পুনরায় byte stream থেকে অবজেক্টে রূপান্তর করা।
Serialization এর কাজ:
- Java দ্বারা automatic serialization প্রদান করা হয় যদি একটি ক্লাস
Serializableইন্টারফেস ইমপ্লিমেন্ট করে। - Serializable ইন্টারফেস ইমপ্লিমেন্ট করার মাধ্যমে, Java জানে যে এটি অবজেক্টের ডেটা ফাইল সিস্টেমে বা নেটওয়ার্কে সেভ করতে পারবে।
Serializable উদাহরণ:
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", 30);
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
out.writeObject(person); // অবজেক্টটি সিরিয়ালাইজ করা হচ্ছে
System.out.println("Object Serialized");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- Person ক্লাসটি
Serializableইন্টারফেস ইমপ্লিমেন্ট করেছে। - ObjectOutputStream এর মাধ্যমে
personঅবজেক্টটি person.ser ফাইলে সেভ করা হয়েছে। - writeObject() মেথড ব্যবহার করে অবজেক্টটি serialization করা হচ্ছে।
Externalizable:
Externalizable ইন্টারফেসটি Serializable এর একটি উন্নত সংস্করণ, যেখানে আপনি serialization এবং deserialization এর পুরো নিয়ন্ত্রণ করতে পারেন। এটি আপনাকে অবজেক্টের serialization process কাস্টমাইজ করার সুযোগ দেয়।
Externalizable এর কাজ:
- Externalizable ইন্টারফেসে দুটি মেথড থাকে:
writeExternal(ObjectOutput out): এটি অবজেক্টের ডেটা লিখে।readExternal(ObjectInput in): এটি অবজেক্টের ডেটা পড়ে।
- এখানে আপনি সুনির্দিষ্টভাবে কি ডেটা serialization করতে চান তা কাস্টমাইজ করতে পারেন।
Externalizable উদাহরণ:
import java.io.*;
class Person implements Externalizable {
String name;
int age;
public Person() {
// Default constructor needed for Externalizable
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(name); // Only serialize name
out.writeInt(age); // Serialize age
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = (String) in.readObject(); // Deserialize name
age = in.readInt(); // Deserialize age
}
}
public class ExternalizableExample {
public static void main(String[] args) {
Person person = new Person("John", 30);
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("personExternal.ser"))) {
out.writeObject(person); // Serialize object using Externalizable
System.out.println("Object Serialized using Externalizable");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- Person ক্লাসটি
Externalizableইন্টারফেস ইমপ্লিমেন্ট করেছে। - writeExternal() এবং readExternal() মেথডগুলোর মাধ্যমে custom serialization এবং deserialization করা হচ্ছে।
Serialization এবং Externalizable এর মধ্যে পার্থক্য:
| বিষয় | Serialization | Externalizable |
|---|---|---|
| কন্ট্রোল | Java স্বয়ংক্রিয়ভাবে অবজেক্টের serialization পরিচালনা করে। | ব্যবহারকারী serialization এবং deserialization কাস্টমাইজ করতে পারেন। |
| ক্লাস ইমপ্লিমেন্টেশন | Serializable ইন্টারফেস ইমপ্লিমেন্ট করতে হয়। | Externalizable ইন্টারফেস ইমপ্লিমেন্ট করতে হয়। |
| কাস্টম Serialization | কাস্টম serialization সম্ভব নয়। | কাস্টম serialization সম্পূর্ণরূপে সম্ভব (writeExternal এবং readExternal মেথড ব্যবহার করে)। |
| ডিফল্ট কনস্ট্রাক্টর | ডিফল্ট কনস্ট্রাক্টর প্রয়োজন নেই। | ডিফল্ট কনস্ট্রাক্টর প্রয়োজন (যেহেতু readExternal ব্যবহার করা হয়)। |
| সিরিয়ালাইজেশন প্রক্রিয়া | Java অবজেক্টের সমস্ত ফিল্ড সিরিয়ালাইজ করে। | আপনি কী কী ফিল্ড সিরিয়ালাইজ করবেন তা নির্ধারণ করতে পারেন। |
| Performance | সাধারণত Serializable দ্রুত এবং সহজ। | কাস্টম serialization এর জন্য কিছু অতিরিক্ত কার্যপ্রণালী থাকতে পারে। |
| চালনা | অধিকাংশ ক্ষেত্রেই সহজ এবং সরল। | বেশি কাস্টমাইজেশন ক্ষমতা এবং জটিল হতে পারে। |
সারসংক্ষেপ:
- Serialization:
- এটি একটি সহজ উপায় যা Java objects কে byte stream-এ রূপান্তর করতে দেয়। এটি
Serializableইন্টারফেস ব্যবহার করে কাজ করে এবং সাধারণভাবে অধিকাংশ ক্লাসে ব্যবহার করা হয়।
- এটি একটি সহজ উপায় যা Java objects কে byte stream-এ রূপান্তর করতে দেয়। এটি
- Externalizable:
- এটি
Serializableএর একটি উন্নত সংস্করণ যাExternalizableইন্টারফেস ব্যবহার করে। এখানে আপনি serialization এবং deserialization এর পুরো নিয়ন্ত্রণ করতে পারেন এবং কাস্টমাইজ করতে পারেন।
- এটি
- পার্থক্য:
- Serialization সাধারণত ফাস্ট এবং সহজ, তবে Externalizable অধিক কাস্টমাইজেশন প্রদান করে, তবে এটি কিছু বেশি জটিল হতে পারে।
Serialization সাধারণত যখন আপনি ডেটা সংরক্ষণ বা স্থানান্তর করতে চান এবং আপনার ডেটার সম্পূর্ণ কাঠামো ব্যবহার করতে চান, তখন ব্যবহৃত হয়। অপরদিকে, Externalizable যখন আপনি বেশি কাস্টমাইজেশন চাচ্ছেন এবং ডেটা সংরক্ষণ বা স্থানান্তর করার সময় কিছু ডেটা বাদ দিতে চান, তখন এটি ব্যবহার করা হয়।
Read more