2009-03-03 11 views
37

मैं एक कक्षा (ArrayBlockingQueue) का विस्तार कर रहा हूं जो Serializable interface लागू करता है। सूर्य की प्रलेखन (और मेरी आईडीई) मेरे सलाह देता है कि मैं आदेश शरारत को रोकने के लिए यह मान सेट करना चाहिए:क्या जावा में सीरियलज़ेबल कक्षाओं को विस्तारित करते समय मैं serialVersionUID के लिए क्या चुनता हूं?

हालांकि, यह सलाह दी जाती है कि सभी serializable वर्गों स्पष्ट serialVersionUID मूल्यों की घोषणा के बाद से डिफ़ॉल्ट गणना serialVersionUID अत्यधिक संवेदनशील है कक्षा विवरण के लिए जो संकलक कार्यान्वयन के आधार पर भिन्न हो सकते हैं, और इस प्रकार deserialization के दौरान अप्रत्याशित अवैध क्लास अपवादों का परिणाम हो सकता है।

अब, मैं इस बात पर कम ध्यान नहीं दे सकता कि वहां क्या मूल्य डालना है। फर्क पड़ता है क्या?

उत्तर

64

नहीं - जब तक आप इसे सही समय पर बदलते हैं (यानी जब आप एक परिवर्तन करते हैं जो क्रमबद्धता को प्रभावित करता है, उदाहरण के लिए एक क्षेत्र को हटा रहा है) इससे कोई फर्क नहीं पड़ता कि आप किस मूल्य का उपयोग करते हैं।

सादगी के लिए मैं 0 से शुरू करने का सुझाव देता हूं और आपको हर बार 1 तक बढ़ाना चाहता हूं।

serialization spec में अधिक जानकारी है।

+1

क्षमा करें जॉन, लिंक एक गैर-मौजूद दस्तावेज़ को इंगित करता है (माना जाता है कि यह 2 साल बाद है)। –

+0

@ द एलिट जेंटलमैन: धन्यवाद, ओरेकल सर्वर पर इंगित करने के लिए संपादित किया गया है। –

+1

क्या मैं समझ सकता हूं कि दो अलग-अलग वर्ग (जैसे MyJLabel और MyEncoder) 'serialVersionUID' के समान मान का उपयोग कर सकते हैं और उचित रूप से deserialised हो सकता है? मुझे लगता है कि हाँ, क्योंकि नाम अलग हैं, यह केवल संस्करण का मामला होना चाहिए। – Matthieu

10

सीरियल VersionUID के लिए महत्वपूर्ण बात यह है कि कक्षा के बाइनरी-संगत क्रमबद्ध संस्करणों में समान serialVersionUID है; यह है कि यदि आपने वर्ग के क्रमबद्ध रूप में कोई तोड़ नहीं दिया है तो यह ठीक होगा।

बेशक, एक बेहतर विकल्प उन उन्नत विकल्पों का उपयोग करना है जो धारावाहिक आपके लिए उपलब्ध कराते हैं ताकि कभी भी कोई ब्रेकिंग परिवर्तन न हो। मैं readResolve() et al के बारे में पढ़ने का सुझाव देना चाहता हूं। प्रभावी जावा विस्तार से इस क्षेत्र में कुछ कांटेदार मुद्दों को शामिल करता है।

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

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