+1 امتیاز
قبل در برنامه نویسی توسط (20 امتیاز)
ویرایش شده قبل توسط

می دونم که private static final long serialVersionUID برای سریالایز کردن استفاده میشه ولی نمی فهمم چرا باید حتما این عبارت خاص را بنویسیم و دقیقتر بگم حتی برای ساختن کلاسهای exception  هم این عبارت رو باید استفاده کنیم. چرا؟

1 پاسخ

+2 امتیاز
قبل توسط (1.1هزار امتیاز)

وقتی کلاس شما Serializable interface را پیاده سازی می کند، کلاس شما باید حاوی یک فیلد static و final از نوع long با نام serialVersionUID باشد و اگر شما این فیلد را تعریف نکنید JVM این فیلد را تعریف و بر اساس الگوریتم داخلی خود مقدار دهی خواهد کرد.

serialization runtime در جاوا برای هر کلاس serializable یک version number در نظر می گیرد که به آن serialVersionUID می گوید. این عدد در فرایند deserialization برای چک کردن اینکه فرستنده و گیرنده با هم سازگار هستند استفاده می شود. در صورتی که کلاس serialize شده ای که به مقصد رسیده serialVersionUID متفاوتی با کلاس serializable موجود در مقصد داشته باشه در فرایند deserialization خطای InvalidClassException رخ می دهد.

حالا اگه فیلد serialVersionUID تعریف نشه چه اتفاق بدی ممکنه بیوفته؟ مگه JVM خودش اگه این نباشه مقدار دهیش نمی کنه؟

serialVersionUID پیش فرضی که توسط JVM تولید میشه ممکنه برای یک کلاس، در پیاده سازی های مختلف JVM متفاوت باشه برای مثال اگه بر روی یک ماشین از Oracle JVM استفاده بشه و روی ماشین دیگه از IBM JVM یا JRockit استفاده بشه ممکنه در فرآیند deserialization به خطای InvalidClassException برخورد کنیم.

در حالت کلی توصیه میشه که برای بوجود نیامدن این مشکلات در فرآیند deserialization بهتر است که فیلد serialVersionUID تعریف و مقداردهی بشود.

قبل توسط (0 امتیاز)
ویرایش شده قبل توسط
با تغییر دادن در کلاس باعث تغییر در serialVersionUID  می شود. دلیل این تغییر چیست.
اگر کلاس تغییر کند باید serialVersionUID   نیز تغییر کند .
اگر تغییر کرد deserialization  انجام می شود یا خطا می دهد.
قبل توسط (1.1هزار امتیاز)
در صورتی که تغییرات در کلاس باعث ناسازگاری با ورژن قبلی شده باشد، serialVersionUID را باید تغییر دهید.

سوالات مشابه

+1 امتیاز
0 پاسخ 1.0هزار بازدید
0 امتیاز
0 پاسخ 78 بازدید
+1 امتیاز
1 پاسخ 425 بازدید
+1 امتیاز
1 پاسخ 390 بازدید
+1 امتیاز
1 پاسخ 177 بازدید
0 امتیاز
0 پاسخ 674 بازدید
0 امتیاز
1 پاسخ 562 بازدید
...