Serialization और Externalization दोनों ऑब्जेक्ट को बाइट स्ट्रीम में बदलने और बाइट स्ट्रीम को डेटाबेस या मेमोरी में स्टोर करने की प्रक्रियाएं हैं। जो क्लास java.io.Serializable इंटरफेस को इम्प्लीमेंट करती है उसे सीरियलाइज किया जा सकता है। दूसरी ओर, Externalization एप्लिकेशन में आवश्यकता के आधार पर कस्टम सीरियलाइजेशन के लिए उपयोग किया जाता है। Externalization, java.io.Serializable को एक्सटेंड करता है।
| क्र.सं. | मुख्य बिंदु | Serialization | Externalization |
|---|---|---|---|
| 1 | इंटरफेस | Serialization एक मार्कर इंटरफेस है | Externalization में दो मेथड्स होते हैं: readExternal और writeExternal |
| 2 | इम्प्लीमेंटेशन लॉजिक | यह इंटरफेस इम्प्लीमेंट करने वाली क्लास JVM को जावा ऑब्जेक्ट को सीरियलाइज या पर्सिस्ट करने की जिम्मेदारी देती है। JVM सीरियलाइजेशन के लिए readObject और writeObject का उपयोग करता है | Externalization readExternal और writeExternal मेथड्स को ओवरराइड करके इम्प्लीमेंटेशन लॉजिक का कंट्रोल एप्लिकेशन को देता है |
| 3 | वेरिएबल्स को इग्नोर करने का तरीका | सीरियलाइजेशन में, JVM जावा ऑब्जेक्ट के सीरियलाइजेशन और डीसीरियलाइजेशन के दौरान transient वेरिएबल को इग्नोर करता है | प्रोग्रामर जावा ऑब्जेक्ट के एक्सटर्नलाइजेशन के दौरान कुछ वेरिएबल्स को इग्नोर करने के लिए अपनी लॉजिक लिख सकता है |
| 4 | परफॉरमेंस | Serializable इंटरफेस रिफ्लेक्शन का उपयोग करता है जो अपेक्षाकृत धीमा परफॉरमेंस देता है | Externalizable इम्प्लीमेंटेशन अप्रोच पर पूरा कंट्रोल देता है |
| 5 | इनहेरिटेंस के साथ ऑब्जेक्ट सीरियलाइजेशन | 1. यदि सुपरक्लास सीरियलाइजेबल नहीं है तो सबक्लास अभी भी सीरियलाइज हो सकती है 2. यदि सबक्लास सीरियलाइज्ड नहीं है लेकिन सुपरक्लास है तो ऑटोमैटिकली सीरियलाइजेबल |
इसे एक्सटर्नलाइजेबल पर भी लागू किया जा सकता है |
Externalizable का उदाहरण
class ExternalizableExample implements Externalizable {
Integer id;
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(id);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
this.id = in.readInt();
}
}
Serializable का उदाहरण
class SerializableExample implements Serializable {
private static final long serialVersionUID = 5081877L;
String name;
}
कब किसका उपयोग करें?
- Serializable: सरल सीरियलाइजेशन के लिए, जब डिफ़ॉल्ट बिहेवियर पर्याप्त हो
- Externalizable: जब सीरियलाइजेशन फॉर्मेट पर पूरा कंट्रोल चाहिए, परफॉरमेंस क्रिटिकल हो, या कॉम्प्लेक्स ऑब्जेक्ट ग्राफ हों