हम इस ट्यूटोरियल में सीखने वाले है कि जावा सेरिअलिज़शन (Java Serialization in Hindi) और हम इसे कैसे इस्तमाल कर सकते हैं? जावा एक Mechanism प्रदान करता है, जिसे ऑब्जेक्ट क्रमांकन कहा जाता है, जहां किसी ऑब्जेक्ट को बाइट्स के अनुक्रम के रूप में दर्शाया जा सकता है जिसमें ऑब्जेक्ट के डेटा के साथ-साथ ऑब्जेक्ट के प्रकार और ऑब्जेक्ट में संग्रहीत डेटा के प्रकार के बारे में जानकारी शामिल होती है।
एक क्रमबद्ध वस्तु को एक फ़ाइल में लिखे जाने के बाद, इसे फ़ाइल से पढ़ा जा सकता है और इसे deserialized किया जा सकता है, अर्थात, प्रकार की जानकारी और बाइट्स जो वस्तु का प्रतिनिधित्व करते हैं और इसके डेटा का उपयोग स्मृति में वस्तु को फिर से बनाने के लिए किया जा सकता है।
Table of Contents
सबसे प्रभावशाली यह है कि पूरी प्रक्रिया JVM से स्वMechanism है, जिसका अर्थ है कि एक वस्तु को एक मंच पर क्रमबद्ध किया जा सकता है और एक पूरी तरह से अलग मंच पर deserialized किया जा सकता है।
क्लासेस ObjectInputStream और ObjectOutputStream उच्च-स्तरीय स्ट्रीम हैं जिनमें किसी ऑब्जेक्ट को क्रमबद्ध करने और डीरियलाइज़ करने के तरीके शामिल हैं।
ObjectOutputStream वर्ग में विभिन्न डेटा प्रकारों को लिखने के लिए कई लेखन विधियाँ हैं, लेकिन एक विधि विशेष रूप से उल्लेखनीय है –
public final void writeObject(Object x) throws IOException
उपरोक्त विधि किसी वस्तु को क्रमबद्ध करती है और उसे आउटपुट स्ट्रीम में भेजती है। इसी तरह, ObjectInputStream वर्ग में किसी वस्तु को डिसेरिएलाइज़ करने के लिए निम्न विधि शामिल है –
public final Object readObject() throws IOException, ClassNotFoundException
यह विधि अगली वस्तु को धारा से बाहर निकालती है और उसे निष्क्रिय करती है। रिटर्न वैल्यू ऑब्जेक्ट है, इसलिए आपको इसे इसके उपयुक्त डेटा प्रकार में डालना होगा।
यह प्रदर्शित करने के लिए कि जावा में क्रमांकन कैसे काम करता है, मैं उस कर्मचारी वर्ग का उपयोग करने जा रहा हूँ जिसकी हमने पुस्तक में शुरुआत में चर्चा की थी। मान लीजिए कि हमारे पास निम्नलिखित कर्मचारी वर्ग है, जो सीरियल करने योग्य इंटरफ़ेस को लागू करता है –
Example
public class Employee implements java.io.Serializable {
public String name;
public String address;
public transient int SSN;
public int number;
public void mailCheck() {
System.out.println(“Mailing a check to ” + name + ” ” + address);
}
}
ध्यान दें कि एक वर्ग को सफलतापूर्वक क्रमबद्ध करने के लिए, दो शर्तों को पूरा करना होगा –
- वर्ग को java.io.Serializable इंटरफ़ेस लागू करना चाहिए।
- कक्षा में सभी फ़ील्ड क्रमबद्ध होने चाहिए। यदि कोई क्षेत्र क्रमबद्ध नहीं है, तो उसे क्षणिक चिह्नित किया जाना चाहिए।
यदि आप यह जानने के लिए उत्सुक हैं कि जावा मानक वर्ग क्रमबद्ध है या नहीं, तो कक्षा के लिए दस्तावेज़ीकरण की जाँच करें। परीक्षण सरल है: यदि वर्ग java.io.Serializable को लागू करता है, तो यह क्रमबद्ध है; अन्यथा, यह नहीं है।
किसी वस्तु को क्रमबद्ध करना (Serializing an Object in Hindi)
ऑब्जेक्टऑटपुटस्ट्रीम क्लास का उपयोग ऑब्जेक्ट को क्रमबद्ध करने के लिए किया जाता है। निम्नलिखित SerializeDemo प्रोग्राम एक कर्मचारी वस्तु को तत्काल बनाता है और इसे फ़ाइल में क्रमबद्ध करता है।
जब प्रोग्राम का निष्पादन पूरा हो जाता है, तो कर्मचारी नाम की एक फाइल बनाई जाती है। प्रोग्राम कोई आउटपुट उत्पन्न नहीं करता है, लेकिन कोड का अध्ययन करें और यह निर्धारित करने का प्रयास करें कि प्रोग्राम क्या कर रहा है।
नोट − किसी फ़ाइल को किसी ऑब्जेक्ट को क्रमबद्ध करते समय, जावा में मानक परंपरा फ़ाइल को एक .ser एक्सटेंशन देना है।
उदाहरण
import java.io.*;
public class SerializeDemo {
public static void main(String [] args) {
Employee e = new Employee();
e.name = “Reyan Ali”;
e.address = “Phokka Kuan, Ambehta Peer”;
e.SSN = 11122333;
e.number = 101;
try {
FileOutputStream fileOut =
new FileOutputStream(“/tmp/employee.ser”);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf(“Serialized data is saved in /tmp/employee.ser”);
} catch (IOException i) {
i.printStackTrace();
}
}
}
किसी वस्तु का वर्णन करना (Deserializing an Object in Hindi)
निम्नलिखित DeserializeDemo प्रोग्राम SerializeDemo प्रोग्राम में बनाए गए कर्मचारी ऑब्जेक्ट को डिसेरियलाइज़ करता है। कार्यक्रम का अध्ययन करें और इसके आउटपुट को निर्धारित करने का प्रयास करें –
Example
import java.io.*;
public class DeserializeDemo {
public static void main(String [] args) {
Employee e = null;
try {
FileInputStream fileIn = new FileInputStream(“/tmp/employee.ser”);
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (Employee) in.readObject();
in.close();
fileIn.close();
} catch (IOException i) {
i.printStackTrace();
return;
} catch (ClassNotFoundException c) {
System.out.println(“Employee class not found”);
c.printStackTrace();
return;
}
System.out.println(“Deserialized Employee…”);
System.out.println(“Name: ” + e.name);
System.out.println(“Address: ” + e.address);
System.out.println(“SSN: ” + e.SSN);
System.out.println(“Number: ” + e.number);
}
}
यह निम्नलिखित परिणाम देगा –
Output
Deserialized Employee…
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101
यहाँ ध्यान देने योग्य महत्वपूर्ण बिंदु हैं –
- try/catch ब्लॉक क्लास नॉटफाउंड अपवाद को पकड़ने का प्रयास करता है, जिसे रीडऑब्जेक्ट() विधि द्वारा घोषित किया जाता है। एक JVM के लिए किसी वस्तु को डिसेर्बलाइज़ करने में सक्षम होने के लिए, उसे कक्षा के लिए बायटेकोड खोजने में सक्षम होना चाहिए। यदि JVM को किसी वस्तु के deserialization के दौरान एक वर्ग नहीं मिल सकता है, तो वह ClassNotFoundException को फेंक देगा।
- ध्यान दें कि रीडऑब्जेक्ट () का रिटर्न मान एक कर्मचारी संदर्भ में डाला गया है।
- SSN फ़ील्ड का मान 11122333 था जब ऑब्जेक्ट को क्रमबद्ध किया गया था, लेकिन क्योंकि फ़ील्ड क्षणिक है, यह मान आउटपुट स्ट्रीम में नहीं भेजा गया था। Deserialized Employee ऑब्जेक्ट का SSN फ़ील्ड 0 है।
हम उम्मीद करते है कि आपको “जावा सेरिअलिज़शन (Java Serialization in Hindi)” से सम्बंधित जानकारी हिंदी में समझ में आयी होंगी यदि आपको बताई गई जानकारी अच्छी लगी हो तो अपने दोस्तों में ऐसे शेयर करे जिससे उनकी भी हेल्प हो सके धन्यवाद!