Externalizable একটি Java I/O ইন্টারফেস যা Serializable ইন্টারফেসের উন্নত সংস্করণ হিসেবে কাজ করে। যখন Serializable ইন্টারফেস ব্যবহার করে একটি অবজেক্টকে সেরিয়ালাইজ করা হয়, তখন জাভা স্বয়ংক্রিয়ভাবে ফিল্ডগুলির ডেটা সেরিয়ালাইজ করে। তবে, Externalizable ইন্টারফেস ব্যবহার করার মাধ্যমে আপনি কাস্টম সেরিয়ালাইজেশন কৌশল তৈরি করতে পারেন, যেখানে আপনি আপনার নির্দিষ্ট নিয়ম অনুসারে ডেটা লেখার এবং পড়ার প্রক্রিয়া নিয়ন্ত্রণ করতে পারবেন।
Externalizable Interface এর ভূমিকা:
Externalizable ইন্টারফেস দুটি মেথড writeExternal() এবং readExternal() ঘোষণা করে, যা ক্লাসটিকে কাস্টম সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন করার অনুমতি দেয়। এটি আপনাকে সেরিয়ালাইজেশন প্রক্রিয়াকে সম্পূর্ণভাবে নিয়ন্ত্রণ করার সুযোগ দেয়, যেখানে আপনি কেবলমাত্র আপনার প্রয়োজনীয় ডেটা সেরিয়ালাইজ করতে পারেন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া থেকে নির্দিষ্ট ডেটা বাদ দিতে পারেন।
Externalizable Interface এর প্রধান মেথড:
writeExternal(ObjectOutput out):- এই মেথডটি অবজেক্টের ডেটা সেরিয়ালাইজ করার জন্য ব্যবহার করা হয়। আপনাকে ObjectOutput স্ট্রীমের মাধ্যমে অবজেক্টের ডেটা লিখতে হবে।
readExternal(ObjectInput in):- এই মেথডটি অবজেক্টের ডেটা ডেসিরিয়ালাইজ করার জন্য ব্যবহৃত হয়। এখানে আপনি ObjectInput স্ট্রীম থেকে ডেটা পড়তে পারেন এবং অবজেক্টের প্রোপার্টিগুলিতে সেট করতে পারেন।
Externalizable Interface এর সুবিধা:
- Customized Serialization:
Externalizableএর মাধ্যমে আপনি সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কৌশল কাস্টমাইজ করতে পারেন, যা আপনাকে শুধু প্রয়োজনীয় ডেটা সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে সহায়ক হয়।
- Control Over Data Serialization:
- আপনি কোন ডেটা সেরিয়ালাইজ করবেন এবং কোনটি করবেন না তা সম্পূর্ণ নিয়ন্ত্রণ করতে পারবেন, যা
Serializableইন্টারফেসে করা সম্ভব নয়।
- আপনি কোন ডেটা সেরিয়ালাইজ করবেন এবং কোনটি করবেন না তা সম্পূর্ণ নিয়ন্ত্রণ করতে পারবেন, যা
- Efficient Serialization:
- যদি অবজেক্টের কিছু ডেটা কম্প্লেক্স বা বড় হয় এবং আপনি সেগুলি সেরিয়ালাইজ করতে চান না, তবে
Externalizableব্যবহারের মাধ্যমে আপনি সেগুলি বাদ দিতে পারেন।
- যদি অবজেক্টের কিছু ডেটা কম্প্লেক্স বা বড় হয় এবং আপনি সেগুলি সেরিয়ালাইজ করতে চান না, তবে
Externalizable Interface এর ব্যবহার:
এখানে একটি উদাহরণ দেওয়া হল যেখানে Externalizable ইন্টারফেস ব্যবহার করে একটি অবজেক্টের ডেটা সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা হবে।
Example: Using Externalizable Interface
import java.io.*;
class Person implements Externalizable {
private String name;
private int age;
// Default constructor (required for Externalizable)
public Person() {}
// Constructor to initialize the person
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Custom serialization
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(name); // Only serialize 'name'
out.writeInt(age); // Serialize 'age'
}
// Custom deserialization
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = (String) in.readObject(); // Deserialize 'name'
age = in.readInt(); // Deserialize 'age'
}
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class ExternalizableExample {
public static void main(String[] args) {
// Create an object of Person
Person person = new Person("John", 30);
try {
// Serialize the object
FileOutputStream fileOut = new FileOutputStream("person.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
person.writeExternal(out);
out.close();
fileOut.close();
// Deserialize the object
FileInputStream fileIn = new FileInputStream("person.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Person deserializedPerson = new Person();
deserializedPerson.readExternal(in);
in.close();
fileIn.close();
// Print the deserialized data
System.out.println("Deserialized Person: ");
System.out.println("Name: " + deserializedPerson.getName());
System.out.println("Age: " + deserializedPerson.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
Personক্লাসটিExternalizableইন্টারফেস ইমপ্লিমেন্ট করে এবংwriteExternal()এবংreadExternal()মেথডের মাধ্যমে সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাস্টমাইজ করা হয়েছে।writeExternal()মেথডে আমরা কেবল name এবং age প্রোপার্টি সেরিয়ালাইজ করছি।readExternal()মেথডে আমরা সেগুলিকে পুনরায় ডেসিরিয়ালাইজ করছি।Personঅবজেক্টটি সেরিয়ালাইজ করা হচ্ছে এবং তারপর ডেসিরিয়ালাইজ করার পর name এবং age প্রোপার্টি প্রিন্ট করা হচ্ছে।
আউটপুট:
Deserialized Person:
Name: John
Age: 30
Externalizable Interface এর সুবিধা এবং সীমাবদ্ধতা:
সুবিধা:
- কাস্টম সেরিয়ালাইজেশন:
- আপনি কাস্টমাইজ করতে পারেন যে কোন ডেটা সেরিয়ালাইজ বা ডেসিরিয়ালাইজ করা হবে। আপনি চাইলে কিছু প্রোপার্টি বাদ দিতে পারেন, যা
Serializableইন্টারফেসে করা সম্ভব নয়।
- আপনি কাস্টমাইজ করতে পারেন যে কোন ডেটা সেরিয়ালাইজ বা ডেসিরিয়ালাইজ করা হবে। আপনি চাইলে কিছু প্রোপার্টি বাদ দিতে পারেন, যা
- পারফরম্যান্স নিয়ন্ত্রণ:
- আপনি যেভাবে ডেটা সেরিয়ালাইজ করবেন বা ডেসিরিয়ালাইজ করবেন তা নিয়ন্ত্রণ করতে পারেন, যা Serializable এর তুলনায় আরও ভালো পারফরম্যান্স প্রদান করতে পারে।
- কমপ্লেক্স অবজেক্টসের জন্য উপযুক্ত:
- যদি আপনার অবজেক্টের মধ্যে কিছু কমপ্লেক্স ফিল্ড বা বড় ফিল্ড থাকে, যেগুলি সেরিয়ালাইজেশন থেকে বাদ দিতে চান, তবে
Externalizableব্যবহারে আপনি সেগুলি বাদ দিতে পারবেন।
- যদি আপনার অবজেক্টের মধ্যে কিছু কমপ্লেক্স ফিল্ড বা বড় ফিল্ড থাকে, যেগুলি সেরিয়ালাইজেশন থেকে বাদ দিতে চান, তবে
সীমাবদ্ধতা:
- বিকল্প ডিফল্ট সেরিয়ালাইজেশন নেই:
Externalizableইন্টারফেসের মাধ্যমে কাস্টম সেরিয়ালাইজেশন করতে হয়। এর মানে হচ্ছে, আপনাকে ম্যানুয়ালি সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কোড লিখতে হবে, যাSerializableইন্টারফেসের তুলনায় বেশি কোডিং প্রয়োজন।
- কনস্ট্রাক্টর প্রয়োজন:
- Externalizable ব্যবহার করার জন্য ক্লাসটির একটি no-argument constructor থাকা প্রয়োজন, যা কখনও কখনও ডেটা প্রক্রিয়া করতে অস্বাভাবিক হতে পারে।
Externalizableইন্টারফেস Java I/O সিস্টেমে customized serialization এবং deserialization এর জন্য ব্যবহৃত হয়।- এটি Serializable এর তুলনায় আরও বেশি নিয়ন্ত্রণ প্রদান করে, বিশেষত যখন complex objects বা large datasets পরিচালনা করতে হয়।
Externalizableইন্টারফেস ব্যবহার করে আপনি একটি অবজেক্টের ডেটা সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার প্রক্রিয়াকে কাস্টমাইজ করতে পারেন, যা পারফরম্যান্স এবং মেমরি ব্যবস্থাপনায় উন্নতি ঘটাতে সহায়ক।
Externalizable ইন্টারফেসটি advanced object serialization এর জন্য উপযুক্ত যেখানে সেরিয়ালাইজেশন প্রক্রিয়া বিস্তারিতভাবে নিয়ন্ত্রণ করতে হয়।
Read more