সরল 1L এর পরিবর্তে কেন দীর্ঘ সিরিয়াল ভার্সনিউড উত্পন্ন?


210

ক্লাস যখন Eclipse এ সিরিয়ালাইজেবল কার্যকর করে, তখন আমার কাছে দুটি বিকল্প থাকে: ডিফল্ট যোগ করুন serialVersionUID(1L)বা উত্পন্ন serialVersionUID(3567653491060394677L)। আমি মনে করি যে প্রথমটি শীতল, তবে বহুবার লোককে দ্বিতীয় বিকল্পটি ব্যবহার করতে দেখেছি। উত্পন্ন করার কোনও কারণ আছে long serialVersionUID?


49
ঠিক সেই নকলটি কীভাবে? কেন এটিকে আদৌ উত্পন্ন করে তা আমি জিজ্ঞাসা করি না তবে কেন দীর্ঘ সিরিয়াল ভার্সনউইডিটি তৈরি করে।
আইএডাপ্টার

13
: যখন জন স্কিট serialVersionUID ব্যবহার করে, সে 0L ব্যবহার stackoverflow.com/questions/605828/... );
Hanno Fietz

8
@ হ্যানোফিয়েটজ: সঠিক বাক্যটি হ'ল: "সরলতার জন্য আমি 0 দিয়ে শুরু করার পরামর্শ দিয়েছি এবং প্রতিবার আপনার প্রয়োজন অনুযায়ী এটি 1 দ্বারা বাড়িয়ে দেওয়ার পরামর্শ দিচ্ছি ।" সুতরাং, মনে হচ্ছে তিনি 0Lকেবল প্রাথমিকভাবে ব্যবহার করেন ।
অথবা ম্যাপার

7
@ ওআমাপ্পার: আপনি কি বোঝাচ্ছেন যে জোন স্কিটকে তার লেখা কোডটি আবার ফিরে যেতে হবে? এমনকি কাঠামোগত বেমানানতার বিন্দুতে। খাবি! বৈধর্ম্য!
থিলো

উত্তর:


90

আমি যতদূর বলতে পারি, এটি কেবল পূর্ববর্তী রিলিজের সাথে সামঞ্জস্যের জন্য। এটি কেবল তখনই কার্যকর হবে যদি আপনি আগে সিরিয়াল ভার্সনইউইডি ব্যবহার করতে অবহেলা করেন এবং তারপরে এমন একটি পরিবর্তন করেন যা আপনি জানেন যে সামঞ্জস্যপূর্ণ হওয়া উচিত তবে এটি সিরিয়ালাইজেশনটি ভেঙে দেয়।

দেখুন জাভা ধারাবাহিকতাতে ফটকা খেলা আরো বিস্তারিত জানার জন্য।


69

সিরিয়ালাইজেশন সংস্করণ ইউআইডি এর উদ্দেশ্য হ'ল বস্তুর বৈধ সিরিয়ালাইজেশন সম্পাদনের জন্য কোনও শ্রেণীর বিভিন্ন সংস্করণ ট্র্যাক করা।

ধারণাটি এমন একটি আইডি তৈরি করা হবে যা কোনও শ্রেণীর নির্দিষ্ট সংস্করণের সাথে স্বতন্ত্র, যা ক্লাসে নতুন বিবরণ যুক্ত করা হয়, যেমন একটি নতুন ক্ষেত্র, যা সিরিয়ালযুক্ত অবজেক্টের কাঠামোর উপর প্রভাব ফেলবে তখন পরিবর্তিত হয়।

সর্বদা একই আইডি ব্যবহার করা, যেমন 1Lভবিষ্যতে শ্রেণীর সংজ্ঞা পরিবর্তিত হয় যা সিরিয়ালযুক্ত বস্তুর কাঠামোর পরিবর্তনের কারণ হয়ে দাঁড়ায়, কোনও বস্তুর বিশৃঙ্খলকরণ করার চেষ্টা করার সময় সমস্যাগুলির উত্থানের খুব ভাল সম্ভাবনা থাকে।

যদি আইডি বাদ দেওয়া হয় তবে জাভা আসলে বস্তুর ক্ষেত্রগুলির উপর ভিত্তি করে আপনার জন্য আইডি গণনা করবে তবে আমি বিশ্বাস করি এটি একটি ব্যয়বহুল প্রক্রিয়া, সুতরাং ম্যানুয়ালি একটি সরবরাহ করা কার্যকারিতা উন্নত করবে।

এখানে ধারাবাহিকীকরণ এবং শ্রেণীর সংস্করণ নিয়ে আলোচনা করা নিবন্ধগুলির কয়েকটি সংযোগ রয়েছে:


50
1 এল ব্যবহার করার পিছনে ধারণাটি হ'ল যাতে আপনি প্রতিবার শ্রেণীর বৈশিষ্ট্য বা পদ্ধতিগুলি পরিবর্তন করেন it
পাওয়ারলর্ড

39
সিরিয়াল রূপান্তরনীতিটি স্বয়ংক্রিয়ভাবে উত্পন্ন হওয়ার অনুমতি দেওয়ার কোনও রানটাইম পারফরম্যান্স প্রভাব নেই - এটি জাভাক দ্বারা সংকলন সময়ে তৈরি করা হয় ... আপনি যদি ক্লাসের বাইটোকডটি ছিন্ন করেন, আপনি আসলে বাইটোকোডে স্থিরভাবে পরিবর্তনশীল দেখতে পাবেন।
Jare

11
আরও একটি নোট - নম্বরটি স্পষ্টভাবে পরিচালনা করে আপনি যখন ক্লাসের সংজ্ঞাটি হুবহু হওয়া প্রয়োজন তার চেয়ে ক্লাসের "সামঞ্জস্যপূর্ণ" সংস্করণগুলি বিবেচনা করবেন তখন আপনি সিদ্ধান্ত নিতে পারবেন।
স্কট স্ট্যাঞ্চফিল্ড

23
জোশ ব্লচের কার্যকর জাভাতে আইটেম 75৫ অনুসারে @ জ্যারেড: দ্বিতীয় সংস্করণ: "আপনার লেখার প্রতিটি ক্রমিক শ্রেণিতে একটি স্পষ্টত সিরিয়াল সংস্করণ ইউআইডি ঘোষণা করুন .... যদি কোনও সিরিয়াল সংস্করণ ইউআইডি সরবরাহ না করা হয়, রানটাইমের সময় একটি ব্যয়বহুল গণনা প্রয়োজন । "
কলিন কে

12
@ কুবার্ড এটি ডিফল্ট সিরিয়াল ভার্সনইউডিএফ প্রস্তাবিত না হওয়ার মূল কারণ বলে মনে হচ্ছে Note - It is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected serialVersionUID conflicts during deserialization, causing deserialization to fail. উপরের মন্তব্যটি জাভা অবজেক্ট সিরিয়ালাইজেশন স্পেসিফিকেশন সংস্করণ 6.0
ইউজার 624558

20

উত্পন্ন একটির মূল কারণ হ'ল এটি ইতিমধ্যে অনুলিপিগুলি বজায় থাকা শ্রেণীর বিদ্যমান সংস্করণের সাথে সামঞ্জস্য করা।


1
ঠিক আছে তবে একই হবে যদি আমার সবসময় 1L থাকে। আমি কোনও পরিবর্তন আনলেও সবকিছু সুসংগত হবে।
গ্রেপ

@grep একটি ক্ষেত্রটির নামকরণের চেষ্টা করুন এবং তারপরে দেখুন কী ঘটে।
ট্রেজকাজ

1
@ গ্রেপ পয়েন্টটি হ'ল যদি আপনার কাছে এমন একটি শ্রেণি থাকে যা আগে সিরিয়াল ভার্সনইউইডিটি বাদ দেয় তবে এটি উত্পন্নটি স্বয়ংক্রিয়ভাবে অর্জন করতে পারত। সুতরাং এখন, আপনি এটিকে স্পষ্টভাবে সেট করা শুরু করতে চান, এটি 1L এ সেট করা এটি বিদ্যমান শ্রেণীর সাথে বেমানান হবে, যেখানে উত্পন্ন মানটি এটি সামঞ্জস্যপূর্ণ রাখে।
mar8282

15

ডিফল্ট সিরিয়ালাইজেশন আচরণ থেকে গণনা করা জাভা সিরিয়ালাইজেশন স্পেসিফিকেশনserialVersionUID দ্বারা নির্ধারিত হিসাবে "এর" দীর্ঘ "ডিফল্ট ।

সুতরাং আপনি যদি ডিফল্ট সংস্করণ নম্বর যুক্ত করেন তবে আপনার ক্লাসটি (ডি-) ততক্ষণ সিরিয়ালিয়াল হবে যতক্ষণ কাঠামোগতভাবে কোনও পরিবর্তন হয়নি, তবে আপনার যত্ন নিতে হবে আপনি যদি ক্লাসটি পরিবর্তন করেন (ক্ষেত্রগুলি যোগ / সরান) তবে আপনি আপডেটটিও আপডেট করবেন ক্রমিক সংখ্যা.

আপনার যদি বিদ্যমান বিট স্ট্রিমগুলির সাথে সামঞ্জস্য না করতে হয় 1Lতবে কিছু পরিবর্তন করার সময় আপনি কেবল সেখানে রেখে দিতে পারেন এবং সংস্করণটি বাড়িয়ে দিতে পারেন । এটি হল, যখন পরিবর্তিত শ্রেণীর ডিফল্ট সিরিয়ালাইজ সংস্করণটি পুরানো শ্রেণীর ডিফল্ট সংস্করণ থেকে আলাদা হবে।


11

আপনি যখন প্রয়োগ করে এমন কোনও ক্লাসের সংজ্ঞা দেন প্রতিবার আপনার অবশ্যই একেবারে একটি সিরিয়াল ভার্সনিউড তৈরি করা উচিত java.io.Serializable। যদি আপনি এটি না করেন তবে একটি স্বয়ংক্রিয়ভাবে আপনার জন্য তৈরি করা হবে তবে এটি খারাপ। স্বয়ংক্রিয়ভাবে উত্পন্ন সিরিয়াল ভার্সনউইউডিটি আপনার শ্রেণীর পদ্ধতি স্বাক্ষরের উপর ভিত্তি করে তৈরি করা হয়, সুতরাং ভবিষ্যতে কোনও পদ্ধতি যুক্ত করার জন্য যদি আপনি আপনার ক্লাস পরিবর্তন করেন (উদাহরণস্বরূপ), শ্রেণীর "পুরাতন" সংস্করণগুলি deserialization ব্যর্থ হবে। যা ঘটতে পারে তা এখানে:

  1. সিরিয়াল ভার্সনউইডিআইডি সংজ্ঞায়িত না করেই আপনার শ্রেণির প্রথম সংস্করণ তৈরি করুন।
  2. আপনার ক্লাসের একটি উদাহরণ একটি ধ্রুবক স্টোরে সিরিয়াল করুন; একটি সিরিয়াল ভার্সনইউড স্বয়ংক্রিয়ভাবে আপনার জন্য উত্পন্ন করা হয়।
  3. একটি নতুন পদ্ধতি যুক্ত করতে আপনার শ্রেণিটি সংশোধন করুন এবং আপনার অ্যাপ্লিকেশনটিকে পুনরায় চালু করুন।
  4. পদক্ষেপ 2-এ সিরিয়ালযুক্ত দৃষ্টান্তটি ডিসিরিয়ালাইজ করার চেষ্টা করা হয়েছিল, তবে এখন এটি ব্যর্থ হয় (কখন এটি সফল হওয়া উচিত), কারণ এটির একটি আলাদা স্বয়ংক্রিয়ভাবে উত্পন্ন সিরিয়াল ভার্সনিউডিউড রয়েছে।

1
প্রকৃতপক্ষে, ক্লাসের পুরানো সংস্করণগুলি deserializing আসলেই ব্যর্থ হওয়া উচিত কারণ সেগুলি আর আগের মতো নয়। শ্রেণীর স্বাক্ষর পরিবর্তিত হলে সিরিয়ালাইজেশন ব্যর্থতা রোধ করার জন্য নিজের দ্বারা সিরিয়াল ভার্সনইউডিউ উত্পন্ন করার পরামর্শ দিন। আপনার পরামর্শটি যথাযথ হলেও, এর উদ্দেশ্য সম্পর্কে আপনার ব্যাখ্যা কেবল ভুল এবং বিভ্রান্তিকর। আপনার উত্তরটি সংশোধন করা বুদ্ধিমানের কাজ হবে।
Mostruash

6

আপনি যদি সিরিয়াল ভার্সনিউডিউড নির্দিষ্ট না করে থাকেন তবে জাভা ফ্লাইতে একটি করে তোলে। উত্পন্ন সিরিয়াল ভার্সনইউডিটি হ'ল এটি। আপনি যদি আপনার ক্লাসে এমন কিছু পরিবর্তন করেন যা আপনার শ্রেণিকে পূর্ববর্তী সিরিয়ালযুক্ত ভেরিয়াসগুলির সাথে সত্যই বেমানান করে না তবে হ্যাশ পরিবর্তন করে, তবে আপনাকে উত্পন্ন খুব-বৃহত সংখ্যার সিরিয়াল ভার্সনউইডিএইচ (বা ত্রুটির বার্তা থেকে "প্রত্যাশিত" নম্বর) ব্যবহার করতে হবে । অন্যথায়, আপনি যদি নিজের নিজের সমস্ত কিছু ট্র্যাক করে রাখেন তবে 0, 1, 2 ... আরও ভাল।


আপনার অর্থ ==> ১. আপনি যদি ক্লাসের বিভিন্ন পরিবর্তনগুলি উপযুক্ত হতে চান তবে উত্পন্নটি ব্যবহার করুন। ২. আপনি যদি চান ক্লাসের বিভিন্ন সংস্করণটি ডিফল্ট একটিকে সামঞ্জস্যপূর্ণ না করে এবং বর্ধিতকরণের ক্ষেত্রে বুদ্ধিমান হয়। আমি কি এটি সঠিকভাবে বুঝতে পেরেছি?
জাভা ডেভেলপার

4

আপনি যখন সিরিয়াল ভার্সনইউডিউ (3567653491060394677L) তৈরির পরিবর্তে সিরিয়াল ভার্সনইউইড (1L) ব্যবহার করেন আপনি কিছু বলছেন।

আপনি বলছেন যে আপনি 100% আত্মবিশ্বাসী যে কোনও সিস্টেম যা এই শ্রেণীর সাথে কখনও স্পর্শ করবে না যার 1 টির সংস্করণ নম্বর সহ এই শ্রেণীর একটি বেমানান সিরিয়ালযুক্ত সংস্করণ রয়েছে has

এটির ক্রমিক সংস্করণ ইতিহাস অজানা হওয়ার জন্য যদি আপনি কোনও অজুহাত ভাবতে পারেন তবে এটি আত্মবিশ্বাসের সাথে বলা শক্ত। এর জীবদ্দশায়, একটি সফল শ্রেণি অনেক লোক দ্বারা বজায় রাখা হবে, অনেক প্রকল্পে বাস করবে এবং অনেক সিস্টেমে থাকবে।

আপনি যে উপর উদ্বেগ করতে পারেন। অথবা আপনি হারার আশায় লটারি খেলতে পারেন। আপনি যদি সংস্করণটি জেনারেট করেন তবে আপনার কিছু ভুল হওয়ার ক্ষুদ্র সুযোগ রয়েছে। যদি আপনি ধরে নেন "আরে আমি এখনও কেউ ব্যবহার করেনি 1" আপনার প্রতিক্রিয়া ক্ষুদ্রের চেয়ে বড়। এটি অবিকল কারণ আমরা সকলেই 0 এবং 1 টি শান্ত বলে মনে করি যে এগুলি মারার পক্ষে আপনার পক্ষে উচ্চ বৈষম্য।

-

আপনি যখন সিরিয়াল ভার্সনউইড (1L) ব্যবহার না করে সিরিয়াল ভার্সনইউইড (3567653491060394677L) তৈরি করেন আপনি কিছু বলছেন।

আপনি বলছেন লোকেরা নিজেই এই শ্রেণীর ইতিহাসের তুলনায় ম্যানুয়ালি অন্য সংস্করণ নম্বর তৈরি বা উত্পন্ন করেছে এবং আপনার কোনও উদ্বেগ নেই কারণ লংরা বড় সংখ্যক সংখ্যক প্রচার করে চলেছে।

যেভাবেই না আপনি পুরো সংস্করণে ক্লাসটি যেখানে তৈরি হয়েছে বা কখনও থাকবে তার ক্রমিকায়িত করার সময় ব্যবহৃত সংস্করণ সংখ্যার ইতিহাস পুরোপুরি না জেনে আপনি কোনও সুযোগ নিচ্ছেন। আপনার যদি 100% নিশ্চিত করার সময় থাকে তবে 1 টি এওকে হয়, এটির জন্য যান। যদি এটি খুব বেশি কাজ করে তবে এগিয়ে যান এবং অন্ধভাবে সংখ্যাটি তৈরি করুন। আপনার লটারিটি ভুল হওয়ার চেয়ে বেশি সম্ভাবনা রয়েছে। যদি তা হয় তবে আমাকে জানান এবং আমি আপনাকে একটি বিয়ার কিনে দেব।

লটারি খেলার এই সমস্ত আলাপের সাথে আমি আপনাকে এই ধারণাটি দিয়েছিলাম যে সিরিয়াল ভার্সনইউডিএফ এলোমেলোভাবে তৈরি করা হয়েছে। প্রকৃতপক্ষে যতক্ষণ সংখ্যার পরিসীমা লং এর প্রতিটি সম্ভাব্য মানের উপর সমানভাবে বিতরণ করা হয় যা জরিমানা হবে। তবে এটি আসলে এইভাবে সম্পন্ন হয়েছে:

http://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100

এর সাথে আপনি যে পার্থক্যটি পান তা হ'ল আপনার এলোমেলো উত্সের প্রয়োজন নেই। ফলাফল পরিবর্তনের জন্য আপনি ক্লাসে পরিবর্তনগুলি ব্যবহার করছেন। তবে কবুতরের নীতি অনুসারে এখনও এটির ভুল হওয়ার এবং সংঘর্ষের সম্ভাবনা রয়েছে। এটি কেবল অবিশ্বাস্যভাবেই অসম্ভব। ভাগ্য ভাল আমার কাছ থেকে একটি বিয়ার বের করে।

যাইহোক, এমনকি যদি শ্রেণিটি কেবলমাত্র একটি সিস্টেম এবং একটি কোড বেসে বাস করে, এই ভেবে যে সংখ্যাটি হাত দিয়ে বাড়ানো আপনাকে সংঘর্ষের শূন্য সুযোগ দেয় ঠিক এর অর্থ আপনি মানুষকে বুঝতে পারছেন না। :)


যদি কোনও "সিস্টেম" শ্রেণিতে স্পর্শ করে, অর্থাৎ শ্রেণিটি এমনভাবে পরিবর্তন করে যাতে সিরিয়ালাইজেশন বেমানান হয়ে যায় তবে প্রশ্ন যদি সেই সিস্টেমটিও সিরিয়াল ভার্সনইউডিউ পরিবর্তন করে। আমি মনে করি না যে প্রতিকুলতাগুলি আরও ছোট যে এটি দীর্ঘ হলে এটি পরিবর্তন করতে মনে রাখবে। আমি মনে করি বরং বিপরীতটি সত্য, যদি পরিবর্তনগুলি মনে রাখার সংখ্যাটি আরও সহজ হয় তবে আমি লক্ষ্য করি যে আমি ঘটনাক্রমে এটি পরিবর্তন করি নি।
reto Gmür

2
এটা মিথ্যা! আপনি যখন সিরিয়াল ভার্সনউইডিউড তৈরি করেন এবং 1L বা আপনি যা বলছেন কিছুই না এর চেয়ে আপনার উত্স কোডে সেই মানটি ঘোষণা করুন: আমি ভবিষ্যতে অপরিজ্ঞাত প্রভাবগুলির সাথে সম্ভবত একটি সনাক্ত করা সংঘর্ষ চাই এবং আমি জাভা বা কোনও মানুষকে এটি আটকাতে চাই না want । জাভা ভৌতিক, তবে বাধ্য। মানুষ সাধারণত বড় সংখ্যায় গণ্ডগোল করে না। এইভাবে, শ্রেণিটি পরিবর্তিত হলে, জাভা এখনও এর পুরানো অসম্পূর্ণ সংস্করণগুলি ডি-সিরিয়াল করতে পারে। মওভাআহাহা ...;)
সুপারওল

1

ঠিক আছে, সিরিয়াল ভার্সনইউইউড এই নিয়মের ব্যতিক্রম যে "স্ট্যাটিক ফিল্ডগুলি ক্রমিকায়িত হয় না"। অবজেক্টআউটপুট স্ট্রিম প্রতিবার আউটপুট স্ট্রিমিতে সিরিয়ালের ভার্সনিউডের মান লিখায় writes অবজেক্ট ইনপুট স্ট্রিম এটিকে আবার পড়বে এবং যদি স্ট্রিম থেকে পড়া মানটি শ্রেণীর বর্তমান সংস্করণে সিরিয়াল ভার্সনইউডিউ মানটির সাথে একমত না হয়, তবে এটি অবৈধ ক্লাসেক্সপশনটি ছুঁড়ে দেয়। তদুপরি, যদি শ্রেণিতে সিরিয়ালযুক্ত হওয়ার জন্য সরকারীভাবে ঘোষিত কোনও সিরিয়াল ভার্সনইউডিউড না থাকে তবে সংকলক স্বয়ংক্রিয়ভাবে ক্লাসে ঘোষিত ক্ষেত্রগুলির উপর ভিত্তি করে উত্পন্ন মান সহ এটি যুক্ত করে।


0

কারণ অনেক ক্ষেত্রে ডিফল্ট আইডি অনন্য নয়। সুতরাং আমরা অনন্য ধারণা তৈরির জন্য আইডি তৈরি করি।


আপনি কি নিজের উত্তরকে মাংসের সাথে আরও সম্পাদনা করতে পারেন? এটি এখানে একটি মন্তব্য মত মনে হচ্ছে। ধন্যবাদ।
ধূসর

0

@ ডেভিড স্মিটস উত্তরটিতে যুক্ত করতে, থাম্বের নিয়ম হিসাবে আমি সর্বদা কনভেনশনের বাইরে ডিফল্ট 1L ব্যবহার করব। আমাকে কেবল ফিরে যেতে হয়েছিল এবং তাদের মধ্যে কয়েকটি কয়েকবার পরিবর্তন করতে হয়েছিল, তবে আমি জানতাম যে আমি যখন প্রতিবার পরিবর্তন করেছি এবং একবারে ডিফল্ট নম্বর আপডেট করেছি।

আমার বর্তমান সংস্থায় তাদের স্বতঃ উত্পাদিত নম্বর প্রয়োজন তাই আমি এটি কনভেনশনের জন্য ব্যবহার করি তবে আমি ডিফল্ট পছন্দ করি। আমার বিবেচনাটি হ'ল, যদি এটি কোনও কনভেনশন না যেখানে আপনি কাজ করেন তবে ডিফল্টটি ব্যবহার করুন, যদি না আপনি ভাবেন যে কোনও কারণে আপনি ক্রমাগত আপনার সিরিয়ালযুক্ত শ্রেণীর কাঠামো পরিবর্তন করে যাবেন।


0

সিরিয়ালাইজেশন সংস্করণ ইউআইডি এর উদ্দেশ্য হ'ল বস্তুর বৈধ সিরিয়ালাইজেশন সম্পাদনের জন্য কোনও শ্রেণীর বিভিন্ন সংস্করণ ট্র্যাক করা।

ধারণাটি এমন একটি আইডি তৈরি করা হবে যা কোনও শ্রেণীর নির্দিষ্ট সংস্করণের সাথে স্বতন্ত্র, যা ক্লাসে নতুন বিবরণ যুক্ত করা হয়, যেমন একটি নতুন ক্ষেত্র, যা সিরিয়ালযুক্ত অবজেক্টের কাঠামোর উপর প্রভাব ফেলবে তখন পরিবর্তিত হয়।

একটি সাধারণ ব্যাখ্যা:

আপনি কি ডেটা সিরিয়ালাইজ করছেন?

সিরিয়ালাইজেশন মূলত কোনও ফাইল / স্ট্রিম / ইত্যাদিতে শ্রেণি ডেটা লিখতে হয়। ডি-সিরিয়ালাইজেশনটি কোনও ক্লাসে ফিরে সেই ডেটা পড়ছে।

আপনি কি প্রযোজনায় যেতে চান?

যদি আপনি কেবল গুরুত্বহীন / জাল ডেটা দিয়ে কিছু পরীক্ষা করে দেখেন তবে তা নিয়ে চিন্তা করবেন না (যদি না আপনি সরাসরি সিরিয়ালাইজেশন পরীক্ষা করেন)।

এটি কি প্রথম সংস্করণ?

যদি তা হয় তবে সিরিয়াল ভার্সনিউড = 1 এল সেট করুন।

এটি কি দ্বিতীয়, তৃতীয় ইত্যাদি প্রোড সংস্করণ?

এখন আপনার সিরিয়াল ভার্সনউইডিউডিটি সম্পর্কে চিন্তা করা দরকার এবং এটিকে গভীরতার সাথে দেখা উচিত।

মূলত, আপনি যখন ক্লাসটি আপডেট / লেখার দরকার পড়েন তখন আপনি সংস্করণটি সঠিকভাবে আপডেট না করেন, আপনি পুরানো ডেটা পড়ার চেষ্টা করার সময় একটি ত্রুটি পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.