2013-02-20 5 views
11

संपादित करें: यादृच्छिक रूप से मेरा मतलब है कि डेवलपर्सधारावाहिक संस्करण यूआईडी के लिए यादृच्छिक संख्या का उपयोग क्यों करें?

सीरियलज़ेबल इंटरफेस को कार्यान्वित करते समय इसका सबसे अच्छा अभ्यास और सीरियल संस्करण यूआईडी निर्दिष्ट करने के लिए वास्तव में महत्वपूर्ण है। कई जगहों पर, मुझे अक्सर यादृच्छिक संख्याओं का उपयोग किया जा रहा है। जैसे जावा 6 में

private static final long serialVersionUID = -6849794470754667710L; 

ArrayList वर्ग से:: जावा 6 में

private static final long serialVersionUID = 234098243823485285L; 

स्ट्रिंग वर्ग से:

प्रभावी जावा (2 संस्करण) पीजी 312

private static final long serialVersionUID = 8683452581122892189L; 

इत्यादि। ग्रहण भी इन यादृच्छिक संख्याओं को उत्पन्न करने का विकल्प प्रदान करता है (हालांकि प्राथमिक डिफ़ॉल्ट एक serialVersionUI उत्पन्न करने के लिए प्रतीत होता है 1L का डी)

यादृच्छिक संख्याओं का उपयोग क्यों करें? क्या यह 1L पर शुरू करने और 2L तक बढ़ने के लिए अधिक समझ में नहीं आता है जब यह किसी समझदार संशोधन नियंत्रण की तरह बदलता है? एकमात्र समय मैं एक यादृच्छिक यादृच्छिक संख्या का उपयोग करने के बारे में सोच सकता हूं, यदि आपने शुरू करने के लिए एक serialVersionUID निर्दिष्ट नहीं किया है और अब ऐसा करना चाहते हैं (जो आपको पिछड़ा संगतता समर्थन प्रदान करने के लिए रन-टाइम स्वत: उत्पन्न संस्करण में संबंध रखता है)।

+1

मुझे नहीं लगता कि वे "यादृच्छिक" संख्याएं हैं, वे सिर्फ मनमानी लगते हैं। वे कक्षा में सदस्यों/विधियों के शायद कुछ प्रकार के हैश हैं। कुल अनुमान, यद्यपि। मेरे पास इस कथन का समर्थन करने के लिए कोई जानकारी नहीं है। –

+0

@ जोनाथन न्यूम्यूज की गणना विधि हस्ताक्षरों और इस तरह के आधार पर की जाती है। – JustinKSU

+0

आप सही हैं क्योंकि वे गणना मूल्य हैं, हालांकि उनके पास इसका कोई अर्थ नहीं है, वे प्रभावी रूप से यादृच्छिक हैं –

उत्तर

10

उन "यादृच्छिक" संख्या शायद संख्या जो Java Object Serialization Specification ... जहां "वर्तमान" समय serialVersionUID पहली बार था पर वर्तमान है "के अनुसार अपने" वर्तमान "के रूप में स्वचालित रूप से वर्ग के लिए उत्पन्न हो गया होता हैं घोषित "।

इससे पहले डेटा को अनुमति देने की अनुमति होगी जो पहले से ही deserialized - भविष्य में तोड़ने वाले परिवर्तनों की एक और स्पष्ट घोषणा के लिए आगे बढ़ने के दौरान आगे बढ़ेगा।

+0

स्टैकओवरफ्लो लीजेंड^ – Shivam

3

वे लगभग यादृच्छिक संख्या नहीं हैं, बल्कि serialver उपकरण का आउटपुट।

+1

धन्यवाद और मैं इसे समझता हूं, लेकिन कोड में इन नंबरों को देखकर मुझे आश्चर्य होता है कि क्या वे सभी वर्ग पहले उदाहरण में serialVersionUID निर्दिष्ट करना भूल गए हैं और उन्हें पुनः लोड कर रहे हैं, या गणना की गई गणनाओं को क्रमबद्ध मूल्यों (धारावाहिक से) चुना है शुरुआत में (और यदि हां, क्यों) –

+2

@ChrisKnight ठीक है जानने का कोई तरीका नहीं है, है ना? मेरा अनुमान # 2 होगा, विशेष रूप से कोड शायद तकनीकी लेखकों द्वारा लिखे गए थे और यह अभी भी 17 साल बाद भी प्रोग्रामर द्वारा एक अच्छी तरह से समझ में नहीं आया विषय है। मैं आमतौर पर 1 एल या -1 एल का उपयोग करता हूं और इसे हमेशा के लिए छोड़ देता हूं। – EJP

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