JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ Serializable ڪلاس اندر SerialVersionUID ڇو استعمال...
0xFF
سطح
Донецк

جاوا ۾ Serializable ڪلاس اندر SerialVersionUID ڇو استعمال ڪريو

گروپ ۾ شايع ٿيل
Serialization۽ SerialVersionUIDهميشه ڪيترن ئي جاوا ڊولپرز لاء هڪ راز رهي ٿو. مان اڪثر سوال ڏسندو آهيان ته ڇا آهي ، يا ڇا ٿيندو جيڪڏهن مان پنهنجي ڪلاس ۾ SerialVersionUIDاعلان نه ڪريان ؟ ان کان سواءِ مونجهارو ۽ ڪثرت سان استعمال ڪيو وڃي ٿو، ان سوال جو ٻيو سبب Eclipse IDE جي گم ٿيل وارننگ آهي ، مثال طور: " Serializable class Customer is not declare a static final SerialVersionUID فيلڊ ڊگھي " long " ). هن آرٽيڪل ۾، توهان نه رڳو جاوا جي بنياديات کي سکندا پر سيريلائيزيشن ۽ ڊي-سيريلائيزيشن جي عمل تي ان جو اثر پڻ. جڏهن توهان هڪ ڪلاس جو اعلان ڪريو ٿا، جيئن ٽوڪن انٽرفيس کي لاڳو ڪرڻ سان ، جاوا رن ٽائيم ڊسڪ تي ان ڪلاس جو هڪ مثال ذخيرو ڪري ٿو ڊفالٽ سيريلائيزيشن ميڪانيزم کي استعمال ڪندي جيستائين توهان پروسيس کي ترتيب نه ڏيو Externalizable انٽرفيس استعمال ڪرڻ لاءِ . سيريلائيزيشن دوران، جاوا رن ٽائم ڪلاس لاءِ ورجن نمبر ٺاهي ٿو ته جيئن ان کي بعد ۾ ختم ڪري سگهجي. جاوا ۾، هن نسخي نمبر طور سڃاتو وڃي ٿو . جيڪڏهن، ڊيسيريلائيزيشن جي دوران، ڪو به ميچ نه آهي، ته پوء اهو عمل هڪ استثنا سان " " اسٽريم ۾ نڪرندو ، ۽ ڪلاس جو نالو ۽ لاڳاپيل پڻ پرنٽ ڪندو . هن مسئلي کي حل ڪرڻ لاء هڪ تڪڙو حل نقل ڪرڻ ۽ ان کي توهان جي ڪلاس ۾ مستقل قسم جي طور تي بيان ڪرڻ آهي. هن آرٽيڪل ۾، اسان ڄاڻون ٿا ته اسان کي جاوا ۾ ڇو استعمال ڪرڻ گهرجي ۽ هن ID کي پيدا ڪرڻ لاء سيريلور JDK ٽول ڪيئن استعمال ڪجي. جيڪڏهن توهان سيريلائيزيشن لاءِ نوان آهيو، توهان پڻ ڏسي سگهو ٿا مٿي 10 جاوا سيريلائيزيشن انٽرويو سوالن کي توهان جي ڄاڻ جو جائزو وٺڻ ۽ وڌيڪ پڙهڻ لاءِ توهان جي سمجھ ۾ خلا ڳوليو. جھڙوڪ (concurrency) ۽ (multithreading)، (serialization) ھڪڙو ٻيو موضوع آھي جيڪو ڪيترائي ڀيرا پڙھڻ جي لائق آھي. SerialVersionUIDSerializableجاوا ۾ Serializable ڪلاس جي اندر SerialVersionUID ڇو استعمال ڪريو - 1SerialVersionUIDSerializableCustomerSerialVersionUIDSerialVersionUIDSerializablejava.io.SerializableSerialVersionUIDSerialVersionUIDInvalidClassExceptionmainjava.io.InvalidClassExceptionSerialVersionUIDSerialVersionUIDprivate static final longSerialVersionUIDConcurrencyMulti-threadingSerialization

جاوا ۾ SerialVersionUID ڇو استعمال ڪريو

جيئن مون چيو، جڏهن اسان هڪ قدر جي وضاحت نه ڪئي آهي SerialVersionUIDجيئن static final longاسان جي ڪلاس ۾، سيريلائيزيشن ميڪانيزم اهو اسان لاء ڪندو. هي ميکانيزم ڪيترن ئي تفصيلن لاءِ حساس آهي، جنهن ۾ توهان جي ڪلاس جا شعبا، انهن جي رسائي ۾ ترميم ڪرڻ وارا، ان کي لاڳو ڪرڻ وارا انٽرفيس، ۽ حتي مختلف ڪمپيلر لاڳو ڪرڻ؛ ڪلاس ۾ ڪا به تبديلي يا مختلف ڪمپيلر جو استعمال شايد هڪ مختلف نتيجو پيدا ڪري سگهي ٿو، SerialVersionUIDجيڪو آخرڪار سيريل ٿيل ڊيٽا کي ٻيهر لوڊ ٿيڻ کان روڪيو. هن آئي ڊي کي ٺاهڻ لاءِ جاوا جي سيريلائيزيشن ميڪانيزم تي ڀروسو ڪرڻ خطرناڪ آهي، ان ڪري اهو سٺو آهي ته ان کي SerialVersionUIDپنهنجي سيريلائيبل ڪلاس ۾ واضح طور تي بيان ڪيو وڃي . مان ڏاڍي صلاح ڏيان ٿو جاوا کلاسک پڙهڻ - جوشوا بلوچ ”اثر جاوا“ جاوا سيريلائيزيشن ۽ انهن کي غلط طريقي سان سنڀالڻ جي مسئلن کي سمجهڻ لاءِ. رستي ۾، JDK پڻ هڪ اوزار مهيا ڪري ٿو ، جيڪو JAVA_HOME ڊاريڪٽري جي بنserialver ڊاريڪٽري ۾ واقع آهي ، منهنجي ڪمپيوٽر تي، C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe ، جيڪو پيدا ڪرڻ لاء استعمال ڪري سگهجي ٿو. پراڻي طبقن لاء. اهو تمام مفيد آهي ان صورت ۾ جڏهن توهان پنهنجي ڪلاس ۾ تبديليون ڪيون آهن جيڪي سيريلائيزيشن کي ٽوڙين ٿيون ۽ توهان جي ايپليڪيشن سيريل ٿيل مثالن کي ٻيهر لوڊ ڪرڻ جي قابل ناهي. توھان آساني سان ھن يوٽيلٽي کي استعمال ڪري سگھوٿا پراڻا مثال ٺاھڻ لاءِ ، ۽ پوءِ ان کي استعمال ڪري واضح طور تي فيلڊ کي پرائيويٽ اسٽيڪ فائنل لانگ قرار ڏيندي . رستي ۾، اهو انتهائي سفارش ڪئي وئي آهي ڪارڪردگي ۽ سيڪيورٽي سببن لاء باقاعده بائنري فارميٽ استعمال ڪرڻ لاء سيريلائيزيشن؛ ٻيهر، "مؤثر جاوا" ۾ ڪيترائي پيراگراف آهن جيڪي باقاعده فارميٽ جي فائدن کي وڏي تفصيل سان ظاهر ڪن ٿا. SerialVersionUIDSerialVersionUID SerialVersionUID

SerialVersionUID پيدا ڪرڻ لاءِ سيريلور JDK يوٽيلٽي ڪيئن استعمال ڪجي

توھان استعمال ڪري سگھوٿا ڪلاس لاءِ serialverپيدا ڪرڻ لاءِ SerialVersionUID. اهو خاص طور تي ترقي يافته طبقن لاءِ مفيد آهي؛ يوٽيلٽي واپسي SerialVersionUIDهڪ آسان ڪاپي فارميٽ ۾. توھان استعمال ڪري سگھوٿا serialverJDK افاديت جيئن مثال ۾ ڏيکاريل آھي:
$ serialver
use: serialver [-classpath classpath] [-show] [classname...]
$ serialver -classpath . Hello
Class Hello is not Serializable.
$ serialver -classpath . Hello
Hello: static final long SerialVersionUID = -4862926644813433707L;
توھان پڻ استعمال ڪري سگھو ٿا يوٽيلٽي کي ڪمانڊ serialverطور ، ھي ھڪ انسپيڪٽر کوليندو جيڪو پورو ڪلاس جو نالو وٺي ٿو ۽ ان کي ڏيکاري ٿو . GUI$ serialver –showserial versionSerial version

خلاصو

ھاڻي اسان ڄاڻون ٿا ته اھو ڇا آھي SerialVersionUID۽ ڇو اھو ضروري آھي ته ان کي Serializable-ڪلاس ۾ بيان ڪيو وڃي، اھو وقت آھي جاوا SerialVersionUID سان لاڳاپيل ڪجھ اهم حقيقتن جو جائزو وٺڻ جو.
  1. SerialVersionUIDسيريل ٿيل ڊيٽا جي نسخي کي ظاهر ڪرڻ لاء استعمال ڪيو ويو.

  2. جڏهن اسان پنهنجي ڪلاس ۾ اعلان نه ڪندا آهيون SerialVersionUID، جاوا رن ٽائم اهو اسان لاءِ ڪندو آهي، پر اهو عمل ڪلاس جي ڪيترن ئي ميٽا ڊيٽا لاءِ حساس هوندو آهي، جنهن ۾ فيلڊن جو تعداد، فيلڊس جو قسم، فيلڊ رسائي موڊيفائر، انٽرفيس جيڪي ڪلاس ۾ لاڳو ڪيا ويندا آهن. , etc. توھان حاصل ڪري سگھوٿا صحيح معلومات Oracle کان سيريلائيزيشن دستاويزن ۾.

  3. اها سفارش ڪئي وئي آهي ته SerialVersionUID کي هڪ خانگي جامد آخري ڊگهو متغير طور اعلان ڪيو وڃي ته جيئن ڊفالٽ ميڪانيزم کان بچڻ لاءِ. ڪجهه IDEs، جهڙوڪ Eclipse ، پڻ ڊيڄاريندڙ جاري ڪن ٿا جيڪڏهن توهان هن کي وساريو، مثال طور: "سيريلائيبل ڪلاس ڪسٽمر ڊگهي قسم جي جامد فائنل SerialVersionUID فيلڊ جو اعلان نٿو ڪري." جيتوڻيڪ توھان ھن ڊيڄاريندڙ کي بند ڪري سگھوٿا ونڊو> ترجيحات> جاوا> ڪمپلر> غلطيون/ ڊيڄاريندڙ> ممڪن پروگرامنگ مسئلا، مان توھان کي ائين نه ڪرڻ جي صلاح ڏيان ٿو. صرف جڏهن ڊيٽا واپس آڻڻ جي ضرورت نه آهي ته مان ان جي باري ۾ بي پرواهه ٿي سگهي ٿو. هتي اهو آهي ته هي غلطي Eclipse IDE ۾ ڪهڙي طرح نظر اچي ٿي، توهان سڀني کي ڪرڻو آهي پهريون تڪڙو فيصلو ڪرڻ. جاوا - 2 ۾ Serializable ڪلاس اندر SerialVersionUID ڇو استعمال ڪريو

  4. توھان پڻ استعمال ڪري سگھو ٿا سيريلور يوٽيلٽي JDK کان جاوا ۾ ڪلاسز لاءِ سيريل ورزن ٺاھيو. يوٽيلٽي ۾ هڪ GUI پڻ آهي، جيڪو -پيراميٽر پاس ڪرڻ وقت فعال ٿئي ٿو show.

  5. سيريلائيزيشن ۾ بهترين عمل واضح طور تي بيان ڪرڻ آهي SerialVersionUID، ڊي-سيريلائيزيشن سان ڪنهن به مسئلي کان بچڻ لاءِ، خاص طور تي جيڪڏهن توهان ڪلائنٽ-سرور ايپليڪيشن سان ڪم ڪري رهيا آهيو جيڪو سيريل ٿيل ڊيٽا تي ڀاڙي ٿو، جهڙوڪ RMI.
اهو سڀ ڪجهه SerialVersionUIDجاوا ۾ آهي. SerialVersionUIDھاڻي اسان ڄاڻون ٿا ته ڪلاس ۾ صحيح بيان ڪرڻ ڇو ضروري آھي . توهان هن ياد ڏياريندڙ لاءِ پنهنجي IDE جي مهرباني ڪري سگهو ٿا، جيڪو ممڪن طور تي توهان جي ڪلاس جي ڊي-سيريلائيزيشن کي ٽوڙي سگهي ٿو. جيڪڏهن توهان سيريلائيزيشن ۽ لاڳاپيل مفهومن بابت وڌيڪ پڙهڻ چاهيو ٿا، ته توهان پڻ پڙهي سگهو ٿا اهي شاندار آرٽيڪل. اصل هتي
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION