मुझे सीरियलाइज्ड संचार में उपयोग की जाने वाली वस्तुओं में अमरूद अपरिवर्तनीय संग्रहों का उपयोग करने के खिलाफ चेतावनी दी गई थी क्योंकि यदि एक अंत में गुवा का संस्करण अपडेट किया गया था, तो क्रमिकता संस्करण असंगतता के मुद्दे हो सकते हैं। क्या यह एक वैध चिंता है?क्या अमरूद अपरिवर्तनीय संग्रह का क्रमबद्धीकरण स्थिर है?
उत्तर
हां, यह एक वैध चिंता है।
अमरूद परियोजना मुखपृष्ठ (http://code.google.com/p/guava-libraries/) से:
सभी वस्तुओं के धारावाहिक रूपों परिवर्तन के अधीन हैं। इन्हें जारी न रखें और मान लें कि उन्हें पुस्तकालय के भविष्य के संस्करण द्वारा पढ़ा जा सकता है।
यदि आप जावा मूल क्रमबद्धता का उपयोग कर रहे हैं तो गुवा एक अच्छा विकल्प नहीं है।
यह केवल "अच्छा विकल्प नहीं है" यदि आप नियंत्रित नहीं कर सकते कि संचार के दोनों सिरों पर कौन सा संस्करण उपयोग किया जाता है। – SteveD
वह बेकार है। अपरिवर्तनीय संग्रह अब तक स्थिर होना चाहिए। वे धारावाहिक रूपों को क्यों बदल देंगे? –
डेटा संरचनाओं के विभिन्न संस्करणों के बीच क्रमबद्धता संगतता बनाए रखना वास्तव में कठिन है। कुछ कारणों से इस [मेलिंग सूची थ्रेड] में कुछ बाद के संदेश देखें (https://groups.google.com/group/guava-discuss/browse_thread/thread/eae0b4232496d2b3/020c9f58640f2263)। –
चलो कुछ परिप्रेक्ष्य दें।
क्रमबद्धता का सबसे प्रमुख प्रयोग हैं:
- अपने आवेदन के रन के बीच में भंडारण डेटा
- एक ग्राहक और एक सर्वर
अमरूद के बीच डेटा भेजने आवेदन 2 के लिए पूरी तरह से ठीक है , यदि आप नियंत्रित करते हैं कि क्लाइंट और सर्वर दोनों पर कौन सा गुवा संस्करण उपयोग किया जा रहा है। इसके अलावा, जबकि अमरूद गुवा संस्करणों के बीच क्रमबद्धता की स्थिरता पर गारंटी नहीं देता है ... वास्तव में, क्रमबद्ध रूपों में अक्सर परिवर्तन नहीं होता है।
दूसरी तरफ, मुझे कुछ परिप्रेक्ष्य दें कि क्यों गुवा धारावाहिक रूपों की स्थिरता की गारंटी नहीं देता है। मैंने 9 और 10 रिलीज किए गए अमरूद के बीच इम्यूटेबल मल्टीसेट का सीरियलाइज्ड फॉर्म बदल दिया, और इसका कारण यह था कि मुझे चीजों को दोबारा करने की ज़रूरत थी ताकि मैं अपरिवर्तनीय संग्रह में इम्यूटेबल सॉर्टेड मल्टीसेट को जोड़ सकूं। आप स्वयं को here बदल सकते हैं। धारावाहिक रूपों को सुसंगत रखने के दौरान यह वही रिफैक्टरिंग करने की कोशिश कर रहा है, लगभग निश्चित रूप से अतिरिक्त अजीब हैक की आवश्यकता होती है, जो ... गुवा टीम के दर्शन के खिलाफ दृढ़ता से दृढ़ता से होती है। (यह शायद मेरे मुकाबले एक और विशेषज्ञ प्रोग्रामर द्वारा किया जा सकता है, लेकिन मुझे अभी भी दावा है कि यह मामूली नहीं होगा।) लंबी अवधि के लिए सीरियलाइजेशन संगतता की गारंटी के लिए above linked mailing list thread में चर्चा के अनुसार प्रयास की भारी मात्रा में आवश्यकता होगी, केविन ने कहा :
पार संस्करण अनुकूलता बातें एक सौ गुना अधिक कठिन और बनाया हम उस पर छोड़ दिया अमरूद से पहले भी शुरू कर दिया है के लिए प्रदान करने के लिए कोशिश कर रहा है।
और जारेड:
मूल समस्या अभी भी वहाँ है: यह सुनिश्चित करना कि धारावाहिक रूपों सभी अमरूद संस्करणों के बीच संगत हैं। यह मेरा लक्ष्य था जब Google संग्रह 1.0 की ओर काम कर रहा था, लेकिन मैंने के बाद उस लक्ष्य को त्याग दिया। क्रॉस-वर्जन संगतता का कार्यान्वयन और परीक्षण प्रयास के लायक नहीं था।
अंत में, मैं बताऊंगा कि गुवा को पूरे स्थान पर Google पर आंतरिक रूप से उपयोग किया जाता है और बहुत अच्छी तरह से प्रबंधित करता है।
यह किसी भी वर्ग के साथ एक मुद्दा हो सकता है - आप पुस्तकालय संस्करण भेजना और प्राप्त करने वाले पक्षों पर समान होना चाहते हैं। – SteveD