Serialization क्या है?


149

मैं ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) के साथ शुरू कर रहा हूं और जानना चाहूंगा: ओओपी पार्लेंस में क्रमांकन का अर्थ क्या है?


इस लेख पर भी एक नज़र डालें, जो बताता है कि क्रमबद्धता कोडप्रोजेक्ट
noserialise.aspx

4
वह लेख पूरा BS है, इसलिए इसकी रेटिंग।
RedAces

क्या यह उस तरह के व्यापक प्रश्नों की तरह नहीं है, जिन्हें आमतौर पर हटा दिया जाता है, क्योंकि Google पर एक खोज एक त्वरित उत्तर देगी?
अर्विमेटल जूल

2
@arvymetal आप सही थे। यह पहली बार था जब मैं
गूँगा हुआ

जवाबों:


143

सीरियलाइज़ेशन एक ऑब्जेक्ट को बाइट्स की एक स्ट्रीम में मेमोरी में बदलने की प्रक्रिया है, ताकि आप इसे डिस्क पर स्टोर करने या नेटवर्क पर भेजने की तरह सामान कर सकें।

Deserialization रिवर्स प्रक्रिया है: बाइट्स की एक धारा को स्मृति में एक वस्तु में बदलना।


46
इसके अलावा, क्रियाओं Marshalऔर Unmarshalपर्याय बन गया है Serializeऔर Deserialize
wulfgarpro

4
क्या स्मृति में कोई वस्तु पहले से ही निम्नतम स्तर पर बाइट्स के रूप में प्रदर्शित नहीं है?
महाकोडर

3
मेमोरी में एक ऑब्जेक्ट संकलक, ओएस और / या हार्डवेयर द्वारा स्वरूपित किया जाएगा। अपना संकलक बदलें और आप अपना प्रारूप बदलें। क्रमबद्ध ऑब्जेक्ट में आपके कोड द्वारा परिभाषित एक प्रारूप होगा, जिससे आप प्रारूप की गारंटी दे सकते हैं। नेटवर्क में ऑब्जेक्ट्स भेजते समय यह भी मददगार होता है - प्राप्त करने वाली मशीन में पूरी तरह से अलग आर्किटेक्चर हो सकता है (और इस प्रकार इन-मेमोरी प्रतिनिधित्व)।
एंड्रयू बार्नेट

1
तो यह एक स्ट्रिंग में बदल जाता है?
NoName

1
एक स्ट्रिंग एक मान्य प्रारूप हो सकता है, लेकिन इसके लिए एक स्ट्रिंग होना आवश्यक नहीं है। स्ट्रिंग्स के अपने अलग-अलग प्रारूप हैं (ASCII, UTF8, UTF16, EBCDIC ...) और वास्तव में अवधारणा को काफी अच्छी तरह से प्रदर्शित करता है। स्ट्रिंग (इन-मेमोरी ऑब्जेक्ट) abcको 0x61 0x62 0x63(ASCII) या 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) के रूप में क्रमांकित किया जाएगा - NUL टर्मिनेटर या एन्कोडेड लंबाई जैसी चीजों के साथ या बिना।
एंड्रयू बार्नेट

91

केवल सरलीकरण बोलना एक वस्तु को बाइट्स की धारा में परिवर्तित करने की एक प्रक्रिया है ताकि इसे एक नेटवर्क पर स्थानांतरित किया जा सके या एक स्थिर भंडारण में संग्रहीत किया जा सके।

Deserialization सटीक विपरीत है - नेटवर्क या हठ भंडारण से बाइट्स की एक धारा प्राप्त करें और इसे उसी राज्य के साथ ऑब्जेक्ट में वापस कनवर्ट करें ।

समझने वाली बात यह है कि बाइट्स की उन धाराओं की व्याख्या कैसे की जाती है या उनमें हेरफेर किया जाता है ताकि हमें ठीक वैसी ही वस्तु / समान स्थिति मिल जाए। इसे प्राप्त करने के विभिन्न तरीके हैं। उनमें से कुछ हैं -

  1. एक्सएमएल : एक्सएमएल में ऑब्जेक्ट कन्वर्ट करें, इसे नेटवर्क पर ट्रांसफर करें या किसी फाइल / डीबी में स्टोर करें। इसे पुनः प्राप्त करें और इसे उसी राज्य के साथ ऑब्जेक्ट में परिवर्तित करें। जावा में हम JAXB का उपयोग करते हैं (XML बाइंडिंग के लिए जावा आर्किटेक्चर) लाइब्रेरी का उपयोग करते हैं। (जावा 6 से यह JDK के साथ बंडल में आता है)।
  2. JSON : ऑब्जेक्ट को JSON में कनवर्ट करके समान किया जा सकता है (जावास्क्रिप्ट ऑब्जेक्ट संकेतन) में । फिर से जीएसओएन लाइब्रेरी है जिसका उपयोग इसके लिए किया जा सकता है।
  3. या हम उस सीरियलाइजेशन का उपयोग कर सकते हैं जो ओओपी भाषा द्वारा प्रदान किया गया है। उदाहरण के लिए, जावा में आप ऑब्जेक्ट को धारावाहिक Serializable interfaceरूप से लागू कर सकते हैं और इसे ऑब्जेक्ट स्ट्रीम में लिख सकते हैं।

@AniketThakur एक बहुत अच्छी व्याख्या, क्या आप मुझे JSONस्क्रैच के बारे में जानने के लिए एक लिंक भी प्रदान कर सकते हैं , क्योंकि मुझे इसके बारे में कुछ भी पता नहीं है
कसुन सियामबलपिटिया

जब भी हम क्रमबद्धता के बारे में बात करते हैं तो हम हमेशा केवल ऑब्जेक्ट का संदर्भ देते हैं। कठबोली हम कार्यात्मक भाषा में क्रमांकन का उपयोग करते हैं जहां हमारे पास कोई वस्तु नहीं है बजाय इसके कि हम नेटवर्क पर स्थानांतरण के लिए फ़ाइलों का उपयोग कर रहे हैं।
परदीप शर्मा

1
सबसे पहले, हमें किसी वस्तु को बाइट्स और बैक की स्ट्रीम में बदलने की आवश्यकता क्यों है? ऐसा क्यों नहीं है कि जो उपयोगकर्ता ऐसा करने की कोशिश कर रहा है उसके लिए एक निहित ऑपरेशन?
अपर्णा चौरंगी

1
अगर हम JSON या XML का उपयोग कर सकते हैं तो हमें आवश्यकता क्यों है या कह रहे हैं कि उन्हें स्ट्रीम के बाइट में परिवर्तित करें? और फिर हम उन्हें केवल बाइट में परिवर्तित करने के बजाय JSOn या XML में संग्रहीत करते हैं।
मुहम्मद फैजान फरीद

78

चित्र के माध्यम से सरल व्याख्या:

रेक्स, मेरे कुत्ते, क्रमबद्ध है!

सादृश्य द्वारा स्पष्टीकरण:

मान लीजिए मैं अपने दोस्त से फोन पर बात कर रहा हूं और मैं उसे अपने नए पिल्ला के बारे में बता रहा हूं।

यहाँ मेरी समस्या है: पिल्ला एक जीवित, सांस लेने वाला स्तनपायी है। मुझे फोन लाइन पर एक पिल्ला कैसे व्यक्त करना है? मैं शारीरिक रूप से अपने फोन रिसीवर में अपना पिल्ला नहीं डाल सकता।

इसलिए इसके बजाय, मुझे फोन पर पिल्ला का प्रतिनिधित्व करना होगा। दूसरे शब्दों में, मैं अपने कुत्ते रेक्स को क्रमबद्ध करता हूं, और मैं उसे फोन लाइन पर रेक्स का क्रमबद्ध संस्करण भेजता हूं:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

यह एक आदर्श प्रतिनिधित्व है - मेरे कुत्ते का एक क्रमांकन।

सारांश:

सीरियललाइज़ेशन का मूल अर्थ है मेरे कुत्ते रेक्स को किसी और चीज़ में बदलना - एक JSON ऑब्जेक्ट - जिसे फिर 1s और 0s की श्रृंखला के रूप में फोन लाइन पर ले जाया जा सकता है। NYC में मेरा दोस्त तब उन 1s और 0s का वापस JSON ऑब्जेक्ट में अनुवाद कर सकता है - ताकि उसके पास मेरे कुत्ते xx का सही प्रतिनिधित्व हो।


16

इसे देखें, इससे आपको अच्छी समझ मिलेगी:

http://en.wikipedia.org/wiki/Serialization

मुझे लगता है कि सीरियलाइज़ेशन शब्द का सबसे आम उपयोग बाइनरी ऑब्जेक्ट को एक्सएमएल (या अन्य स्ट्रिंग) प्रतिनिधित्व में बदलने के साथ करना है ताकि इसे डेटाबेस / फ़ाइल में संग्रहीत किया जा सके या एक वेब सेवा कॉल में एक नेटवर्क पर भेजा जा सके। Deserialization एक रिवर्स प्रक्रिया है - किसी XML / string को वापस ऑब्जेक्ट में बदलना।

संपादित करें: आपके पास एक और शब्द हो सकता है मार्शलिंग / अनमर्सहॉलिंग। मार्शलिंग मूल रूप से क्रमबद्धता के रूप में एक ही अवधारणा है, और अनस्मर्शलिंग डेसरियलाइजिंग के समान है।


3
जरूरी नहीं कि सिर्फ XML, यह किसी भी प्रतिनिधित्व हो सकता है, यहां तक ​​कि एक द्विआधारी प्रतिनिधित्व
मैथ्यू Farwell

7

सीरियलाइज़ेशन ऑब्जेक्ट को स्टोर करने या मेमोरी, डेटाबेस, या फ़ाइल में संचारित करने के लिए किसी वस्तु को बाइट्स की धारा में परिवर्तित करने की प्रक्रिया है । इसका मुख्य उद्देश्य किसी वस्तु की स्थिति को बचाने के लिए है ताकि जरूरत पड़ने पर उसे फिर से बनाया जा सके। रिवर्स प्रोसेस को डीसराइलाइजेशन कहा जाता है।

...

यह चित्रण क्रमबद्धता की समग्र प्रक्रिया को दर्शाता है

क्रमबद्धता की समग्र प्रक्रिया

...

क्रमांकन के माध्यम से, एक डेवलपर वेब सेवा के माध्यम से दूरस्थ अनुप्रयोग में ऑब्जेक्ट भेजने, ऑब्जेक्ट को एक डोमेन से दूसरे डोमेन पर भेजने, फ़ायरवॉल के माध्यम से XML स्ट्रिंग के रूप में, या सुरक्षा या उपयोगकर्ता-विशिष्ट बनाए रखने जैसी क्रियाएं कर सकता है। अनुप्रयोगों में जानकारी

से https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(जोर मेरा)


5

सीरियलाइजेशन टोकन की एक श्रृंखला में अनऑर्डर किए गए डेटा (जैसे एक ऑब्जेक्ट) को परिवर्तित करने की प्रक्रिया है जिसका उपयोग बाद में मूल डेटा को फिर से संगठित करने के लिए किया जा सकता है। क्रमबद्ध रूप सबसे अधिक बार पाठ का एक स्ट्रिंग है, लेकिन होना नहीं है।


2

क्रमांकन एक वस्तु को बिट बिट अनुक्रम में परिवर्तित कर रहा है।

इसलिए आप इस अनुक्रम को किसी फ़ाइल, db या नेटवर्क पर भेज सकते हैं।

बाद में आप इसे वास्तविक वस्तु से अलग कर सकते हैं और इसे जब चाहें उपयोग कर सकते हैं।

वेब सेवाएँ और AJAX क्रमांकन का सबसे सामान्य उदाहरण है। क्लाइंट को प्रतिक्रिया भेजने से पहले वस्तुओं को क्रमबद्ध किया गया।


1

सीरियलाइजेशन और कुछ नहीं बल्कि समर्थित फॉर्म फाइल करने के लिए जावा सपोर्टेड ऑब्जेक्ट को ट्रांसफर करना है

                         (OR)

परिवर्तित जावा समर्थित फॉर्म को नेटवर्क समर्थित फॉर्म में..सीरियलाइजेशन का मुख्य स्कोप कुछ भी नहीं है, बल्कि डेटा को एक लेयर से दूसरी लेयर में ट्रांसफर करना है ... केवल सीरियल किए गए ऑब्जेक्ट्स जो हम नेटवर्क पर भेज सकते हैं ..


1

सीरियलाइज़ेशन एक जावा, सी # या किसी अन्य (ओओपी भाषा) समर्थित ऑब्जेक्ट को एक परिवहनीय रूप में परिवर्तित करने की प्रक्रिया है। इस तरह इसे नेटवर्क पर ले जाया जाता है या डिस्क पर संग्रहीत किया जाता है। श्रेणीबद्ध होने के लिए, इसे क्रमबद्ध इंटरफ़ेस लागू करना होगा।


केवल जावा या सी # तक ही सीमित नहीं है, अधिकांश प्रोग्रामिंग भाषा में हम क्रमबद्धता का उपयोग करते हैं। उदाहरण के लिए अजगर अचार मॉड्यूल का उपयोग उसी के लिए किया जाता है।
परदीप शर्मा

0

सीरियलाइज़ेशन डेटा को बाइट्स के रैखिक "स्ट्रिंग" में बदल रहा है।

अन्य लोगों ने भी कमोबेश यही बात कही है, लेकिन मैं इस बात पर जोर देता हूं कि कंप्यूटर मॉडल के लिए जरूरी है कि डेटा एक-डिमेसिवली रैम या सस्टेनेबल स्टोरेज में फिट हो।

ज्यादातर चीजें जो "डेटा" हैं वे स्वाभाविक रूप से क्रमबद्ध हैं (भले ही आपको सार मॉडल को रैखिक एक को कम करना होगा); नहीं कहा जा सकता है कि एक नेटवर्क कनेक्शन या एक जटिल स्थिति-आधारित मशीन जैसे पार्सर।


0

धारावाहिकीकरण को एक बाइनरी ऑब्जेक्ट को एक्सएमएल (या अन्य स्ट्रिंग) प्रतिनिधित्व में बदलने के साथ करना है ताकि इसे डेटाबेस / फ़ाइल में संग्रहीत किया जा सके या एक वेब सेवा कॉल में नेटवर्क पर भेजा जा सके। Deserialization एक रिवर्स प्रक्रिया है - किसी XML / string को वापस ऑब्जेक्ट में बदलना।


0

जब किसी वर्ग (खाका) से वास्तविक वस्तु (चीज़) को तात्कालिक (निर्माण) किया जाता है, तो स्मृति में एक स्थान पर इसे क्रमबद्ध करके (इसे इसकी मूल परमाणु संरचना को तोड़कर) वस्तु (चीज़) को बचाने की आवश्यकता होती है। (स्टार ट्रेक ट्रांसपोर्टर की तरह की)। आप उस चीज़ को जानकारी की उस धारा में तोड़ देते हैं, जिसे कहीं और ले जाया जा सकता है। फिर जब आप उस चीज़ को फिर से बनाना चाहते हैं जिसे आप वस्तु में संग्रहीत परमाणु उदाहरण को वापस खींचते हैं। अस्थिरता से अलग।


0

सीरियलाइज़ेशन एक वस्तु को बाइनरी डेटा स्ट्रीम में परिवर्तित करने की प्रक्रिया है ताकि इसे एक फ़ाइल में संग्रहीत किया जा सके या एक नेटवर्क में भेजा जा सके जहां इसे फिर से उसी ऑब्जेक्ट पर पुनर्जीवित किया जा सके।

इस दस्तावेज़ को आपको जावा क्रमांकन को विस्तार से समझने में मदद करनी चाहिए।


-1

सीरियलाइज़ेशन तब होता है जब ऑब्जेक्ट (मेमोरी का एक हिस्सा) का एक रूप में अनुवाद किया जाता है जब ऑब्जेक्ट की स्थिति को फ़ाइल में (उदाहरण के रूप में) बचाया जा सकता है।

बस इसे कुकीज़ बनाने के रूप में समझो - वस्तु एक आटा है, कुकी - एक क्रमबद्ध आटा है।

तो "क्रमबद्ध" करके आप अपने दोस्त को कुकी भेज सकते हैं।

ऐसा कुछ :-)


4
... कुकीज़ को छोड़कर आटा (deserialized) में वापस नहीं किया जा सकता।
डेव शेरोहमान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.