मैंने धारावाहिक पर बहुत सारे लेख पढ़े हैं और यह कितना अच्छा और शानदार है लेकिन कोई भी तर्क पर्याप्त नहीं था। मैं सोच रहा हूं कि क्या कोई मुझे वास्तव में बता सकता है कि ऐसा क्या है जो हम वास्तव में एक वर्ग को क्रमबद्ध करके प्राप्त कर सकते हैं?
मैंने धारावाहिक पर बहुत सारे लेख पढ़े हैं और यह कितना अच्छा और शानदार है लेकिन कोई भी तर्क पर्याप्त नहीं था। मैं सोच रहा हूं कि क्या कोई मुझे वास्तव में बता सकता है कि ऐसा क्या है जो हम वास्तव में एक वर्ग को क्रमबद्ध करके प्राप्त कर सकते हैं?
जवाबों:
पहले क्रमांकन को परिभाषित करते हैं, फिर हम इस बारे में बात कर सकते हैं कि यह इतना उपयोगी क्यों है।
Serialization बस एक मौजूदा ऑब्जेक्ट को बाइट सरणी में बदल रहा है। यह बाइट सरणी ऑब्जेक्ट के वर्ग, ऑब्जेक्ट के संस्करण और ऑब्जेक्ट की आंतरिक स्थिति का प्रतिनिधित्व करता है। इस बाइट सरणी का उपयोग तब जेवीएम द्वारा ऑब्जेक्ट को प्रसारित / पढ़ने के लिए समान कोड चलाने के बीच किया जा सकता है।
हम ऐसा क्यों करना चाहेंगे?
इसके कई कारण हैं:
संचार: यदि आपके पास दो मशीनें हैं जो समान कोड चला रही हैं, और उन्हें संचार करने की आवश्यकता है, तो एक आसान तरीका यह है कि एक मशीन एक ऐसी वस्तु के निर्माण के लिए है जिसमें यह जानकारी हो कि वह संचारित करना चाहती है, और फिर उस वस्तु को दूसरी मशीन से अनुक्रमित करें। यह संचार के लिए सबसे अच्छा तरीका नहीं है, लेकिन यह काम पूरा कर लेता है।
दृढ़ता: यदि आप किसी डेटाबेस में किसी विशेष ऑपरेशन की स्थिति को संग्रहीत करना चाहते हैं, तो इसे आसानी से बाइट सरणी में अनुक्रमित किया जा सकता है, और बाद में पुनर्प्राप्ति के लिए डेटाबेस में संग्रहीत किया जा सकता है।
डीप कॉपी: यदि आपको किसी ऑब्जेक्ट की एक सटीक प्रतिकृति की आवश्यकता है , और आप अपने स्वयं के विशेष क्लोन () वर्ग को लिखने की परेशानी में नहीं जाना चाहते हैं, तो बस ऑब्जेक्ट को बाइट सरणी में क्रमबद्ध करें, और फिर इसे दूसरे को डी-सीरियल करें। वस्तु इस लक्ष्य को प्राप्त करती है।
कैशिंग: वास्तव में सिर्फ उपरोक्त का एक अनुप्रयोग है, लेकिन कभी-कभी एक वस्तु के निर्माण में 10 मिनट लगते हैं, लेकिन डी-सीरियल करने में केवल 10 सेकंड लगेंगे। इसलिए, स्मृति में विशाल वस्तु को पकड़ने के बजाय, इसे क्रमांकन के माध्यम से एक फ़ाइल में कैश करें, और बाद में इसे तब पढ़ें जब इसकी आवश्यकता हो।
क्रॉस JVM सिंक्रोनाइज़ेशन: विभिन्न JVM में सेरिअलाइजेशन काम करता है जो विभिन्न आर्किटेक्चर पर चल सकता है।
जब आप अपना एप्लिकेशन चला रहे हों, तो उसकी सभी ऑब्जेक्ट्स मेमोरी (RAM) में स्टोर हो जाती हैं। जब आप बाहर निकलते हैं, तो वह मेमोरी ऑपरेटिंग सिस्टम द्वारा पुनः प्राप्त हो जाती है, और आपका प्रोग्राम अनिवार्य रूप से सब कुछ भूल जाता है जो कि चल रहा था। आपके एप्लिकेशन को डिस्क पर सहेजने की अनुमति देकर इसे सीरियलाइज़ेशन उपचार करता है ताकि यह अगली बार शुरू होने पर उन्हें वापस पढ़ सके। यदि आपका एप्लिकेशन पिछली स्थिति को सहेजने / साझा करने का कोई तरीका प्रदान करने जा रहा है, तो आपको किसी प्रकार के क्रमांकन की आवश्यकता होगी।
मैं अपनी कहानी साझा कर सकता हूं और मुझे उम्मीद है कि यह कुछ विचार देगा कि क्रमांकन क्यों आवश्यक है। हालाँकि, आपके प्रश्न के उत्तर पहले से ही उल्लेखनीय हैं।
मेरे पास कई परियोजनाएं थीं जिन्हें टेक्स्ट फ़ाइलों का एक गुच्छा लोड करने और पढ़ने की आवश्यकता है। फाइलों में स्टॉप शब्द, बायोमेडिकल वर्ब, बायोमेडिकल संक्षिप्ताक्षर, शब्द एक-दूसरे से शब्दबद्ध रूप से जुड़े हुए हैं, आदि इन फाइलों की सामग्री सरल है: शब्द !
अब प्रत्येक परियोजना के लिए, मुझे इन फ़ाइलों में से प्रत्येक से शब्दों को पढ़ने और उन्हें विभिन्न सरणियों में डालने की आवश्यकता थी; जैसा कि फ़ाइल की सामग्री कभी नहीं बदली, यह पहली परियोजना के बाद एक आम, लेकिन निरर्थक, कार्य बन गया।
इसलिए, मैंने जो किया वह यह है कि मैंने इनमें से प्रत्येक फाइल को पढ़ने के लिए और व्यक्तिगत सरणियों (वस्तुओं के उदाहरण चर) को पॉप्युलेट करने के लिए एक ऑब्जेक्ट बनाया। फिर मैंने वस्तुओं को क्रमबद्ध किया और फिर बाद की परियोजनाओं के लिए, मैंने बस उन्हें निष्क्रिय कर दिया। मुझे फाइलें पढ़ने और बार-बार सरणियों को आबाद करने की जरूरत नहीं थी।
सार में :
सीरियलाइज़ेशन ऑब्जेक्ट इंस्टेंस के एक सेट को परिवर्तित करने की प्रक्रिया है जिसमें एक दूसरे को बाइट्स की रैखिक धारा में संदर्भित किया जाता है, जिसे तब सॉकेट के माध्यम से भेजा जा सकता है, जो एक फ़ाइल में संग्रहीत किया जाता है, या बस डेटा की एक धारा के रूप में हेरफेर किया जाता है।
विकी से उपयोग देखें :
सीरियलाइजेशन के कई फायदे हैं। यह प्रावधान:
- उन वस्तुओं को बनाए रखने की एक विधि जो डिस्क पर एक टेक्स्ट फ़ाइल के लिए उनके गुणों को लिखने से अधिक सुविधाजनक है, और इस में वापस पढ़ने के द्वारा उन्हें फिर से इकट्ठा करना।
- दूरस्थ प्रक्रिया कॉल जारी करने की एक विधि, उदाहरण के लिए, सोप में
- वस्तुओं को वितरित करने की एक विधि, विशेष रूप से सॉफ़्टवेयर घटक जैसे COM, CORBA, आदि में।
- समय-भिन्न डेटा में परिवर्तनों का पता लगाने के लिए एक विधि।
सबसे स्पष्ट यह है कि आप नेटवर्क पर क्रमबद्ध वर्ग को प्रसारित कर सकते हैं, और प्रापक मूल इंस्टेंस्ट के डुप्लिकेट का निर्माण कर सकता है। इसी तरह, आप एक फ़ाइल सिस्टम के लिए एक धारावाहिक संरचना को बचा सकते हैं।
इसके अलावा, ध्यान दें कि क्रमबद्धता पुनरावर्ती है, इसलिए यदि आप चाहें, तो आप एक स्वेल फूप में संपूर्ण विषम डेटा संरचना को क्रमबद्ध कर सकते हैं।
सीरियलाइज्ड ऑब्जेक्ट्स अंतरिक्ष में स्थिति बनाए रखते हैं, उन्हें नेटवर्क, फाइल सिस्टम, आदि ... और समय पर स्थानांतरित किया जा सकता है, वे उन जेवीएम को रेखांकित कर सकते हैं जिन्होंने उन्हें बनाया था।
कभी-कभी यह उपयोगी है।
मैं फंक्शंस या क्लास कंस्ट्रक्टर्स के पास जाने वाले तर्कों को मानकीकृत करने के लिए क्रमबद्ध वस्तुओं का उपयोग करता हूं। एक क्रमिक बीन पास करना तर्कों की लंबी सूची की तुलना में बहुत साफ है। परिणाम कोड है जो पढ़ने और डिबग करने में आसान है।
सीखने के सरल उद्देश्य के लिए (नोटिस, मैंने कहा सीखने के लिए, मैंने सबसे अच्छा, या यहां तक कि अच्छा नहीं कहा, लेकिन सिर्फ सामान को समझने के लिए), आप अपने डेटा को कंप्यूटर पर पाठ फ़ाइल में सहेज सकते हैं, फिर एक कार्यक्रम है उस जानकारी को पढ़ता है, और फ़ाइल के आधार पर, आप अपने कार्यक्रम को अलग तरह से प्रतिक्रिया दे सकते हैं। यदि आप अधिक उन्नत थे, तो जरूरी नहीं कि यह एक txt फ़ाइल हो, लेकिन कुछ और।
दूसरी ओर सीरियल करना, चीजों को सीधे कंप्यूटर की भाषा में डालता है। यह ऐसा है जैसे आप स्पैनिश में स्पैनिश कंप्यूटर को कुछ बता रहे हैं, बजाय इसे फ्रेंच में कुछ कहने के, इसे फ्रेंच सीखने के लिए मजबूर कर रहे हैं, फिर सब कुछ अनुवाद करके अपने मूल स्पैनिश में चीजों को बचाएं। सबसे तकनीकी-गहन उत्तर नहीं, मैं केवल एक सामान्य भाषा प्रारूप में एक समझने योग्य उदाहरण बनाने की कोशिश कर रहा हूं।
सीरियलाइज़ेशन भी तेज़ है, क्योंकि जावा में, ऑब्जेक्ट्स को ढेर पर संभाला जाता है, और अगर स्टैक पर प्राइमिटिव के रूप में प्रतिनिधित्व किया गया था तो इससे अधिक समय लगता है। गति, गति, गति। और प्रोग्रामर के दृष्टिकोण से कम फ़ाइल प्रसंस्करण।