2009-04-01 15 views
13

मुझे लगता है कि एक serialVersionUID निर्दिष्ट किए बिना संकलित किया गया कई serializable वर्गों की है। अब मुझे इन कक्षाओं में कुछ डेटा सदस्यों को जोड़ने की जरूरत है, लेकिन कुछ पहले से ही क्रमबद्ध वस्तुओं को संरक्षित करना चाहते हैं।मैं धारावाहिक जावा ऑब्जेक्ट के serialVersionUID को कैसे ढूंढ सकता हूं?

ताकि मैं स्रोत कोड में एक ही आईडी निर्दिष्ट कर सकते हैं वहाँ वैसे भी इन धारावाहिक वस्तुओं की serialVersionUID पता लगाने के लिए है?

उत्तर

13

आप अभी तक कोड संशोधित नहीं किया है तो आप शायद serialver उपकरण (JDK का हिस्सा) को चलाने और देखें कि यह क्या उत्पन्न कर सकता है। मेरा मानना ​​है कि आपको मिलेगा seriVersionUID गणना की गई है।

Here is a brief article on serialver.

+2

सुनिश्चित करें कि आप वही JVM के साथ ऐसा करते हैं जिसे आपने मूल रूप से कोड संकलित करने के लिए उपयोग किया था! – Eddie

+1

यह भी एक अलग JVM पर काम करना चाहिए, क्योंकि अन्यथा वर्ग फ़ाइलों और धारावाहिक वस्तुओं JVMs भर में पोर्टेबल नहीं होगा (जो वे कर रहे हैं)। – Thilo

+4

जावा ऑब्जेक्ट सीरियलाइजेशन स्पेक, सेक्शन 4.6, बताता है कि सिंथेटिक सदस्यों के लिए अलग-अलग नाम उत्पन्न करने वाले कार्यान्वयन के कारण, आंतरिक कक्षाओं के मामले में सीरियलवर्सनयूआईडी जेवीएम में संगत नहीं हो सकता है। मैंने इसे दो सूर्य जेवीएम के साथ अभ्यास में भी देखा है। – Martin

3

आप ग्रहण का उपयोग कर रहे हैं, तो यह एक "त्वरित सुधार" गणना की serialVersionUID उत्पन्न करने के लिए है। यह निश्चित रूप से केवल तभी काम करता है जब आपके पास ऑब्जेक्ट्स क्रमबद्ध होने पर कक्षाओं के लिए (सटीक) स्रोत हो।

यदि आपके पास कम से कम उनके लिए वर्ग फ़ाइलों, "serialver" कमांड लाइन टूल (JDK के साथ आता है) का उपयोग करें।

6

क्या मैं आमतौर पर करते हैं, मैं कोड संकलन, इसे चलाने के लिए प्रयास करें, और उठाया अपवाद हमलावर SVUID का उल्लेख है, तो मैं कटौती करने और अपने खुद के कोड में पेस्ट कर सकते हैं। क्रूड, लेकिन यह काम करता है।

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

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