2009-09-30 22 views
6

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

किसी ऑब्जेक्ट को किस शर्त को संतुष्ट करना चाहिए ताकि वस्तु जावा के डिफ़ॉल्ट क्रमिकरण/deserialization दौर यात्रा के तहत अपने व्यवहार को बनाए रखे?

उत्तर

0

मुझे ऑब्जेक्ट.hashCode() के @ स्टीफन सी का उदाहरण पसंद है। यदि इस तरह के नोडेटर्मेनिस्टिक हैश कोड क्रमबद्ध होते हैं, तो जब हम deserialize, हैश कोड का कोई उपयोग नहीं किया जाएगा। उदाहरण के लिए, यदि हम ऑब्जेक्ट.hashCode() पर आधारित हैश मैप को क्रमबद्ध करते हैं, तो इसका deserialized संस्करण मूल मानचित्र से अलग व्यवहार करेगा। यही है, एक ही वस्तु को देखते हुए हमें दो मानचित्रों में अलग-अलग परिणाम मिलेंगे।

+0

अपने मूल प्रश्न को बदलें, स्टैक ओवरव्लो दिशानिर्देशों के अनुसार उत्तर में दोबारा पूछें नहीं। – Peter

+0

निश्चित रूप से। मैंने अपना सवाल उठाया। यह वास्तव में मूल प्रश्न का एक सुधार है। – reprogrammer

2

यदि आपके पास समान मूल्यों पर सेट सभी गुणों के साथ दो ऑब्जेक्ट हैं, तो उन्हें उसी तरह से क्रमबद्ध किया जाएगा।

यदि यह दोहराने योग्य नहीं था, तो यह उपयोगी नहीं होगा!

+0

@ किवेली: सच नहीं है। हैशसेट और हैश मैप डेटा संरचनाओं के मामले पर विचार करें। –

1

वे हमेशा इसे उसी तरह से क्रमबद्ध करेंगे। यदि यह मामला नहीं था, तो इस बात की कोई गारंटी नहीं होगी कि एक और कार्यक्रम धारावाहिकरण के उद्देश्य को हराकर डेटा को सही तरीके से डी-सीरियलाइज कर सकता है।

+0

क्या यह किसी भी जानकारी को रिसाव करता है जो ऑब्जेक्ट मेमोरी पतों जैसे विभिन्न प्रोग्राम निष्पादन में बदल सकता है? – reprogrammer

+0

नहीं। जहां तक ​​मुझे वस्तु का शुद्ध प्रतिनिधित्व और उसके मूल्यों का पता है; ऑब्जेक्ट को फिर से बनाने के लिए जरूरी डेटा जब डी-सीरियलाइज्ड और कुछ भी नहीं। – Peter

+2

कोई अंतर्निहित कारण नहीं है कि एक ही ऑब्जेक्ट का क्रमिकरण दो बार बाइट्स के समान अनुक्रम का उत्पादन करने की आवश्यकता क्यों है। उदाहरण के लिए, वे अलग-अलग कुंजी के साथ एन्क्रिप्ट किया जा सकता है। जब तक कुंजी धारावाहिक डेटा स्ट्रीम में ऑब्जेक्ट से पहले होती है और एन्क्रिप्शन एल्गोरिदम ज्ञात होता है, तो कोई अन्य प्रोग्राम स्ट्रीम को आसानी से डिक्रिप्ट कर सकता है और मूल ऑब्जेक्ट को फिर से बना सकता है। यह मानने का कोई कारण नहीं है कि जावा क्रमबद्धता यह करता है, लेकिन यह संभवतः संभव है। – Alohci

-2

मैं प्रारूप को देख रहा हूं कि जावा वस्तुओं को क्रमबद्ध करने के लिए उपयोग करता है।

इनन नहीं होना चाहिए, यह उन्हें किसी भी तरह लिखता है। यह वास्तव में कितना हो सकता है और शायद आपके द्वारा निर्धारित किया जाना चाहिए। एक कैरेक्टर मैप्स .... ओह, यह शामिल हो जाता है लेकिन पहिया का पुन: आविष्कार करने की बजाए हमें यह पूछने दें कि किसी वस्तु को पुनर्निर्माण के लिए आपको क्या उपलब्ध कराने की ज़रूरत है?

डिफ़ॉल्ट क्रमबद्धता ऑब्जेक्ट को द्विआधारी प्रारूप में क्रमबद्ध करता है।

तो? (फिर से, बेहूदा बनने की कोशिश कर नहीं - लगता है कि हम एक समस्या डेटा concepted नहीं हो सकता है कि परिभाषित करने की जरूरत)

मुझे पता है उत्सुक हूँ एक कार्यक्रम के दो रन ही वस्तु अलग ढंग से कर सकते हैं अगर क्रमानुसार ।

यदि आपके पास जानकारी का एक स्ट्रीम था, तो आप कैसे निर्धारित करेंगे कि ऑब्जेक्ट को किस स्थिति में बहाल करने की आवश्यकता है?

1

आमतौर पर एक ही डेटा के साथ एक ही सिंगल-थ्रेडेड एल्गोरिदम चलाने के परिणामस्वरूप एक ही परिणाम होगा।

हालांकि, ऑर्डर जैसी चीजें जिनके साथ HashSet धारावाहिक प्रविष्टियों की गारंटी नहीं है। दरअसल, धारावाहिक होने पर एक वस्तु को संक्षेप में बदला जा सकता है।

संबंधित मुद्दे