मार्कर इंटरफेस और डीप कॉपी - 1

"हाय, अमीगो!"

"हाय, बिलाबो!"

"आज मैं आपको मार्कर इंटरफेस के बारे में बताऊंगा ।"

"मार्कर इंटरफेस बिना विधियों के इंटरफेस हैं। जब कोई वर्ग इस तरह के इंटरफेस को लागू करता है, तो हम कहते हैं कि यह इसके द्वारा चिह्नित है।"

"इन इंटरफेस के उदाहरणों में शामिल हैं: क्लोन करने योग्य, सीरियल करने योग्य, रिमोट ।"

" Serializable इंटरफ़ेस का उपयोग क्रमबद्धता का समर्थन करने वाली कक्षाओं को चिह्नित करने के लिए किया जाता है, यह दर्शाता है कि इन वर्गों के उदाहरणों को स्वचालित रूप से क्रमबद्ध और deserialized किया जा सकता है।"

" दूरस्थ इंटरफ़ेस का उपयोग उन वस्तुओं की पहचान करने के लिए किया जाता है जो दूरस्थ निष्पादन का समर्थन करते हैं, अर्थात ऐसी विधियाँ जिन्हें किसी अन्य जावा वर्चुअल मशीन और/या अलग कंप्यूटर से मंगवाया जा सकता है।"

" क्लोन करने योग्य इंटरफ़ेस का उपयोग क्लोनिंग का समर्थन करने वाली कक्षाओं को चिह्नित करने के लिए किया जाता है।"

"ओह, क्लोनिंग या कॉपी करने के बारे में।"

"नकल दो प्रकार की होती है: उथली और गहरी।"

" उथली नकल एक वस्तु की एक प्रति बना रही है, बिना किसी वस्तु के डुप्लिकेट बनाए जो इसे संदर्भित करती है।"

" डीप कॉपी में किसी वस्तु की नकल करना शामिल है, जिसमें वह वस्तुएँ शामिल हैं जो संदर्भित करती हैं, और वे वस्तुएँ जो उन वस्तुओं को संदर्भित करती हैं, आदि।"

"गहरी क्लोन बनाने के लिए वास्तव में एक अच्छा तरीका है।"

"यह विधि तब भी काम करती है जब डेवलपर्स एक वर्ग को क्लोन करने योग्य के रूप में चिह्नित करना भूल गए हों।" केवल आवश्यकता यह है कि वस्तुओं को क्रमबद्ध होना चाहिए।

"इसे कैसे करना है इसके बारे में यहां बताया गया है:"

1) मेमोरी में बफर (बाइट ऐरे) बनाएं।

2) ऑब्जेक्ट और सबोबजेक्ट्स को बफर में सीरियल करें।

3) बफ़र में सहेजी गई वस्तु पदानुक्रम का वर्णन करें।

कोड
BigObject objectOriginal = new BigObject();

ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer);
outputStream.writeObject(objectOriginal);
outputStream.close();

byte[] buffer = writeBuffer.toByteArray();
ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer);
ObjectInputStream inputStream = new ObjectInputStream(readBuffer);
BigObject objectCopy = (BigObject)inputStream.readObject();

"पहली पंक्ति में, हम objectOriginal बनाते हैं , जिसे हम क्लोन करेंगे। वस्तु और उसके सभी उप-वस्तुओं को क्रमांकन का समर्थन करना चाहिए।"

"तीसरी पंक्ति में, हम एक ByteArrayOutputStream बनाते हैं , जो गतिशील रूप से विस्तारित होगा क्योंकि नया डेटा जोड़ा जाता है (एक ArrayList की तरह)।"

"पंक्ति 4 में, हम एक ObjectOutputStream बनाते हैं , जिसका उपयोग क्रमांकन के लिए किया जाता है।"

"पंक्ति 5 में, हम आउटपुटस्ट्रीम का उपयोग करके ऑब्जेक्ट ओरिजिनल को बाइट सरणी में क्रमबद्ध करते हैं और इसे राइटबफ़र में सहेजते हैं ।"

"पंक्ति 8 में, हम राइटबफ़र को एक साधारण बाइट सरणी में परिवर्तित करते हैं। बाद में हम इस सरणी से अपनी नई वस्तु को 'पढ़ेंगे'।"

"पंक्ति 9 में, हम एक इनपुटस्ट्रीम की तरह इसे पढ़ने के लिए बफर को बाइटएरेइनपुटस्ट्रीम में बदलते हैं।"

"पंक्ति 10 में, हम ऑब्जेक्टइनपुटस्ट्रीम कन्स्ट्रक्टर को ऑब्जेक्ट को पढ़ने (deserialize) करने के लिए readBuffer पास करते हैं।"

"11वीं पंक्ति में, हम अपने ऑब्जेक्ट को पढ़ते हैं और इसे BigObject में बदलते हैं ।"

"आप क्या सोचते हैं?"

"यह खूबसूरत है।"

"और वैसे, जब कोड को अलग-अलग रंगों में हाइलाइट किया जाता है, तो इसे समझना बहुत आसान हो जाता है।"