জাভাতে সিরিয়ালাইজেশন ধারণাটি কী?

এই নিবন্ধটি আরও ভাল বোঝার জন্য রিয়েল-টাইম উদাহরণগুলির সাথে জাভাতে সিরিয়ালাইজেশন ধারণার দিকে এক বিস্তৃত পদ্ধতির সাহায্য করবে।

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



জাভাতে সিরিয়ালাইজেশন কী?

সিরিয়ালাইজেশন জাভা ইন জাভা কোড রূপান্তর প্রক্রিয়া অবজেক্ট একটি মধ্যে বাইট স্ট্রিম , একটি জাভা ভার্চুয়াল মেশিন থেকে অন্যটিতে অবজেক্ট কোড স্থানান্তর করতে এবং এর প্রক্রিয়াটি ব্যবহার করে এটি পুনরায় তৈরি করতে Deserialization।



Serialization-in-Java-Edureka-Picture-1

আমাদের সিরিয়ালাইজেশন কেন দরকার জাভাতে ?

নিম্নলিখিত কারণে আমাদের সিরিয়ালাইজেশন প্রয়োজন:



  • যোগাযোগ : সিরিয়ালাইজেশন অবজেক্টের পদ্ধতি জড়িত সিরিয়ালাইজেশন এবং সংক্রমণ. এটি একাধিক কম্পিউটার সিস্টেমগুলিকে একই সাথে ডিজাইন, ভাগ এবং কার্যকর করতে সক্ষম করে।

  • ক্যাচিং : কোনও বস্তু তৈরিতে ব্যয় করা সময়টি ডি-সিরিয়ালাইজ করার জন্য প্রয়োজনীয় সময়ের তুলনায় বেশি হয়। সিরিয়ালাইজেশন সময় ব্যয়কে হ্রাস করে ক্যাচিং দৈত্য বস্তু।

  • গভীর কপি : ক্লোনিং প্রক্রিয়া সিরিয়ালাইজেশন ব্যবহার করে সহজ করা হয়। হুবহু প্রতিলিপি একটি বস্তুর দ্বারা প্রাপ্ত হয়একটিতে বস্তু সিরিয়ালাইজিং বাইট অ্যারে , এবং তারপরে এটি ডি-সিরিয়ালাইজ করা।



    জাভা মধ্যে একটি নম্বর বিপরীত
  • ক্রস জেভিএম সিঙ্ক্রোনাইজেশন: সিরিয়ালাইজেশনের বড় সুবিধা হ'ল এটিবিভিন্ন জেভিএম জুড়ে কাজ করে যা হয়ত আলাদা হতে পারে আর্কিটেকচার বা অপারেটিং সিস্টেম

  • অধ্যবসায়: যে কোনও অবজেক্টের স্থিতি সরাসরি সিরিয়ালাইজেশন প্রয়োগ করে এটিতে সংরক্ষণ করা যেতে পারে তথ্যশালা যাতে এটি হতে পারে পরে উদ্ধার করা হয়েছে।

আমরা কীভাবে কোনও অবজেক্টকে সিরিয়ালাইজ করব?

প্রতি জাভা অবজেক্ট হয় সিরিয়ালযোগ্য যদি এবং শুধুমাত্র যদি এর শ্রেণি বা এর পিতামাতাদের কোনও শ্রেণি প্রয়োগ করে javaআমিসিরিয়ালাইজযোগ্য ইন্টারফেস বা এর subinterface, java.io.Externizable।

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

//ইন্টারফেস

প্যাকেজ সিরিয়াল 1 আমদানি java.io. সরীকরণযোগ্য পাবলিক ক্লাস কর্মী সিরিয়ালাইজযোগ্য {বেসরকারী স্থিতিশীল চূড়ান্ত দীর্ঘ সিরিয়াল ভার্সনউইড = 1 এল // ক্রমিক সংস্করণ ইউআইডি ইন্ট আইডি স্ট্রিংয়ের নাম পাবলিক কর্মচারী (ইন্ট আইডি, স্ট্রিং নাম) {this.id = id this.name = নাম }}

// সিরিয়ালাইজ করুন

প্যাকেজ সিরিয়াল 1 আমদানি java.io. * শ্রেনী পার্স্ট {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং আরগস []) {চেষ্টা করুন {কর্মচারী এম 1 = নতুন কর্মচারী (20110, 'জন') কর্মচারী এমপ 2 = নতুন কর্মচারী (22110, 'জেরি') কর্মচারী এমপি 3 = নতুন কর্মচারী (২০১২০, 'স্যাম') ফাইলআউটপুটস্ট্রিম ফাউট = নতুন ফাইলআউটপুটস্ট্রিম ('আউটপুট.টেক্সট') অবজেক্টআউটপুটস্ট্রিম আউট = নতুন অবজেক্টআউটপুটস্ট্রিম (ফাউট) আউট.উইরটঅবজেক্ট (এমপি ১) আউট.উইরাইটঅবজেক্ট (এমপ ২) আউট।উইরাইটঅবজেক্ট (এমপি ৩) আউট। ফ্লাশ () আউটক্লোজ () System.out.println ('সিরিয়ালাইজেশন এবং ডেসারিয়ালাইজেশন সফলভাবে কার্যকর করা হয়েছে')} ক্যাচ (ব্যতিক্রম ই) {System.out.println (e)}}}

আউটপুট:

সিরিয়ালাইজেশন এবং ডেসারিয়ালাইজেশন সফলভাবে কার্যকর করা হয়েছে

Deserialization : এটি সিরিয়ালাইজেশনের বিপরীত প্রক্রিয়া যেখানে প্রেরকের কাছ থেকে কোনও বস্তুর সিরিয়ালাইজড বাইট স্ট্রিম প্রাপ্তির শেষে পুনরায় তৈরি করা হয়।

// ডেসরিয়ালাইজ করা

প্যাকেজ সিরিয়াল 1 আমদানি java.io. * শ্রেণি Depersist {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং আরগস []) {চেষ্টা করুন {অবজেক্টইনপ্রীস্ট্রিম ইন = নতুন অবজেক্টইনপ্রীম স্ট্রিম (নতুন ফাইলআইপুটস্ট্রিম ('আউটপুট.টেক্সট')) কর্মচারী e1 = (কর্মচারী) in.readObject ( ) কর্মচারী e2 = (কর্মচারী) in.readObject () কর্মচারী e3 = (কর্মচারী) in.readObject () System.out.println (e1.id + '' + e1.name) System.out.println (e2.id + '' + e2.name) System.out.println (e3.id + '' + e3.name) in.close ()} ক্যাচ (ব্যতিক্রম ই) {System.out.println (e)}}}

আউটপুট:

20110 জন
22110 জেরি

20120 সাম

জাভাতে সিরিয়ালকরণের সুবিধা এবং অসুবিধা

সুবিধাদি:

  • সিরিয়ালাইজেশন প্রক্রিয়া হ'ল ক অন্তর্নির্মিত বৈশিষ্ট্য যা সিরিয়ালাইজেশন চালাতে তৃতীয় পক্ষের সফ্টওয়্যার প্রয়োজন হয় না
  • সিরিয়ালাইজেশন পদ্ধতিটি প্রমাণিত সরল এবং সহজ বুঝতে

  • সিরিয়ালাইজেশন পদ্ধতিটি হ'ল সর্বজনীন এবং বিভিন্ন ব্যাকগ্রাউন্ডের বিকাশকারীরা এটির সাথে পরিচিত

  • এটি ব্যবহার করা সহজ এবং কাস্টমাইজ করা সহজ

  • সিরিয়ালযুক্ত ডেটা স্ট্রিম এনক্রিপশন, সংক্ষেপণ, প্রমাণীকরণ সমর্থন এবং নিরাপদ জাভা কম্পিউটিং

  • এখানে অনেক সমালোচনা প্রযুক্তি সিরিয়ালাইজেশন উপর নির্ভর করে।

অসুবিধাগুলি:

  • ডি-সিরিয়ালাইজেশন হওয়ার সময় অবজেক্টগুলি ভঙ্গুর এবং তারা কার্যকরভাবে ডি-সিরিয়ালাইজড হওয়ার বিষয়ে নিশ্চিত নয়।

  • সিরিয়ালাইজেশন মেমরির স্থান তৈরি করার সময় অস্থায়ী ভেরিয়েবলগুলি ঘোষিত হয়, তবে কনস্ট্রাক্টর বলা হয় না যার ফলে ক্ষণস্থায়ী ভেরিয়েবলের সূচনাতে ব্যর্থ হয় যার ফলস্বরূপ স্ট্যান্ডার্ড জাভা ফ্লোতে প্রকরণ।

  • সিরিয়ালাইজেশন প্রক্রিয়া হয় অদক্ষ স্মৃতি ব্যবহারের ক্ষেত্রে।

  • প্রয়োজনীয় অ্যাপ্লিকেশনগুলিতে সিরিয়ালাইজেশন ব্যবহার করা ভাল নয় একযোগে অ্যাক্সেস প্রয়োজন ছাড়া তৃতীয় পক্ষের এপিআই যেমন সিরিয়ালাইজেশন প্রতি এসই প্রতি কোনও রূপান্তর নিয়ন্ত্রণ ব্যবস্থার প্রস্তাব দেয় না।

  • সিরিয়ালাইজেশন পদ্ধতি অফার করতে ব্যর্থ জরিমানা নিয়ন্ত্রণ অবজেক্ট অ্যাক্সেস করতে।

জাভাতে সিরিয়ালাইজেশনের ব্যবহারিক উদাহরণ

উত্তরাধিকার ব্যবহার করে সিরিয়ালাইজেশন

কেস - ১: সুপারক্লাস যদি সিরিয়ালাইজেবল হয় তবে ডিফল্টরূপে এর সাবক্লাসগুলিও সিরিয়ালযোগ্য।

এই ক্ষেত্রে, সাবক্লাস যদি ডিফল্টরূপে সিরিয়ালাইজযোগ্য হয় সুপারক্লাস বাস্তবায়ন করা হয় সিরিয়ালাইজযোগ্য ইন্টারফেস

প্যাকেজ সিরিয়ালাইজেশন ইনরিটিট্যান্স আমদানি java.io.FileInputStream আমদানি java.io.FileOutputStream আমদানি java.io.ObjectInputStream আমদানি java.io.ObjectOutputStream আমদানি java.io.Sriizable বর্গ A ক্রমীকরণযোগ্য ক্রিয়াকলাপ {int i পাবলিক এ (int i) {this.i = i}} শ্রেণি বি A {int j পাবলিক বি প্রসারিত করেছে (int i, int j) {সুপার (i) this.j = j}} পাবলিক ক্লাস টেস্ট {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আর্গুমেন্ট) ছোঁড়া ব্যতিক্রম th বি বি 1 = নতুন বি (200,400) System.out.println ('i =' + b1.i) System.out.println ('j =' + b1.j) ফাইলআউটপ্রেম স্ট্রোমস = নতুন ফাইলআউটপুট স্ট্রিম ('abc.ser') অবজেক্টআউটপুট স্ট্রিম oos = নতুন অবজেক্টআউটপুটস্ট্রিম (fos) oos.writObject (b1) oos.close () fos.close () System.out.println ('বস্তুটি সিরিয়ালাইজড করা হয়েছে') ফাইলইনপুটস্ট্রিম fis = নতুন ফাইলআইপুটস্ট্রিম ('abc.ser') অবজেক্টইনপ্রেম স্ট্রিম = নতুন অবজেক্ট ইনপুটস্ট্রিম (ফিস) বি বি 2 = (বি) ওআইস.রেডঅবজেক্ট () ওস.ক্লস () fis.close () System.out.println ('অবজেক্টটি deserialized করা হয়েছে') System.out.println ('i = '+ b2.i) System.out.println (' j = '+ b2.j)}

আউটপুট:

j = 20
অবজেক্টটি সিরিয়ালযুক্ত করা হয়েছে
অবজেক্টটি deserialized করা হয়েছে
i = 200
j = 400

কেস - ২: একটি সুপারক্লাস সিরিয়ালাইজেবল ইন্টারফেস বাস্তবায়ন না করলেও সিরিয়ালাইজযোগ্য ইন্টারফেস প্রয়োগ করলে একটি সাবক্লাস সিরিয়ালীকৃত হতে পারে।

এই ক্ষেত্রে, যদি সুপারক্লাস বাস্তবায়ন করছে না সিরিয়ালাইজযোগ্য ইন্টারফেস এরপরে, এর অবজেক্টগুলি সাবক্লাস সাবক্লাসে সিরিয়ালাইজেবল ইন্টারফেস প্রয়োগ করে ম্যানুয়ালি সিরিয়ালাইজ করা যেতে পারে।

প্যাকেজ সিরিয়ালাইজেশন ইনহিরিট্যান্স আমদানি java.io.FileInputStream আমদানি java.io.FileOutputStream আমদানি java.io.ObjectInputStream আমদানি java.io.ObjectOutputStream আমদানি java.io.Sriizable বর্গ সুপারক্লাস {int i পাবলিক সুপারক্লাস (int i) {this.i = পাবলিক সুপারক্লাস () {i = 50 System.out.println ('সুপারক্র্লাস কনস্ট্রাক্টর' নামে ডাকা হয়)}} শ্রেণীর সাবক্লাস সুপারক্লাস প্রয়োগগুলি ক্রমিক প্রসারিত করে iz int j পাবলিক সাবক্লাস (int i, int j) {সুপার (i) this.j = j }} পাবলিক ক্লাস টেস্ট 2 {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরোগেস) ব্যতিক্রম ছোঁড়া {সাবক্লাস বি 1 = নতুন সাবক্লাস (10, 20) System.out.println ('i =' + b1.i) System.out.println ( 'j =' + b1.j) ফাইলআউটপুটস্ট্রিম fos = নতুন ফাইলআউটপুটস্ট্রিম ('আউটপুট.সেসর') অবজেক্টআউটপুটস্ট্রিম oos = নতুন অবজেক্টআউটপুটস্ট্রিম (fos) oos.writeObject (বি 1) oos.close () fos.close () System.out.println ('অবজেক্টটি সিরিয়ালাইজ করা হয়েছে') ফাইলআইপুটপ্রবাহ fis = নতুন ফাইলআইপুটপ্রবাহ ('আউটপুট.সার') অবজেক্টইনপুটস্ট্রিম ওস = নতুন অবজেক্ট ইনপুটস্ট্রিম (ফিস) সাবক্লাস বি 2 = (সাবক্লাস) ois.readObject ( ) ois.close () fis.close () System.out.println ('অবজেক্টটি deserialized করা হয়েছে') System.out.println ('i =' + b2.i) System.out.println ('j =' + বি 2.জে)}

অবজেক্টটি সিরিয়ালযুক্ত করা হয়েছে
সুপারক্লাস নির্মাণকারীকে ডেকে আনে
অবজেক্টটি deserialized করা হয়েছে
i = 50
j = 20

কেস - 3: সুপারক্লাসটি যদি সিরিয়ালাইজযোগ্য হয় তবে আমাদের সাবক্লাসটি সিরিয়ালীকৃত করার দরকার নেই।

এই ক্ষেত্রে, সাবক্লাসের সিরিয়ালাইজেশন প্রতিরোধ করা যেতে পারেপ্রয়োগ করে লেখার অবজেক্ট () এবং পড়ুনউবজেক্ট () সাবক্লাস পদ্ধতি এবং এটি নিক্ষেপ করা প্রয়োজন নোটসিরাইজেবল এক্সসেপশন এই পদ্ধতি থেকে।

প্যাকেজ সিরিয়ালাইজেশনথান আমদানি java.io.FileInputStream আমদানি java.io.FileOutputStream আমদানি java.io.IOException আমদানি java.io.NotSerializableException আমদানি java.io.ObjectInputStream আমদানি java.io.ObjectOutputstream আমদানি সিরিজিয়ালিয়াইজেক্ট.আজ আমি সর্বজনীন পিতামাতার (অন্তর্গত i) {this.i = i i} শ্রেণীর শিশু পিতামাতার প্রসারিত করে public অন্তর্ভুক্ত জব পাবলিক শিশু (ইনট আই, ইনট জে) {সুপার (আই) এই.জে = জে} প্রাইভেট শূন্য রাইটঅবজেক্ট (অবজেক্টআউটপ্রেম স্ট্রিম আউট) ছোঁড়ে আইওএক্সেপশন new নতুন নটস্রিজাইজিয়েবল এক্সেকশন () নিক্ষেপ করুন v বেসরকারী শূন্যপদ পড়ুন অবজেক্ট (অবজেক্টইনপ্রেস স্ট্রিম ইন) আইওএক্সেপশন নিক্ষেপ করুন Not নতুন নটস্রিজাইজিয়েবল এক্সেক্সশন ()}} পাবলিক ক্লাস টেস্ট 3 {পাবলিক স্ট্যাটিক অকার্যকর মূল (স্ট্রিং [] আর্কস) ছোঁড়া ব্যতিক্রম {শিশু বি 1 = নতুন শিশু (100) 200) System.out.println ('i =' + b1.i) System.out.println ('j =' + b1.j) ফাইলআউটপুটস্ট্রিম fos = নতুন ফাইলআউটপুট স্ট্রিম ('abc.ser') অবজেক্টআউটপুটস্ট্রিম oos = নতুন অবজেক্টআউটপুট স্ট্রিম ( fos) oos.writeObject (b1) oos.close () fos.close () System.out.println ('অবজেক্ট সিরিয়ালাইজ করা হয়েছে ') ফাইলআইনপুটস্ট্রিম এফআইএস = নতুন ফাইলআইপুটস্ট্রিম (' abc.ser ') অবজেক্ট ইনপুটস্ট্রিম ois = নতুন অবজেক্টইনপাস্ট্রিম (fis) চাইল্ড বি 2 = (চাইল্ড) ois.readObject () ois.close () fis.close () System.out। println ('অবজেক্টটি deserialized করা হয়েছে') System.out.println ('i =' + b2.i) System.out.println ('j =' + b2.j)}

আউটপুট:

i = 100
j = 200
থ্রেড 'মূল' java.io.NotSerializableException মধ্যে ব্যতিক্রম
সিরিয়ালাইজেশনহেনারিটেন্স.চাইল্ড.উইটঅবজেক্ট (টেস্ট3. জাভা ৪৪৮)
সূর্য.আরফ্লেক.নেটিভ ম্যাথোডএকসেসরআইএমপিএল.নোওকে0 (নেটিভ পদ্ধতি)

স্থিতিশীল সদস্য ব্যবহার করে ক্রমিকায়ন

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

প্যাকেজ স্ট্যাটি আমদানি java.io. * শ্রেণি স্ট্যাটিকসায়ারিয়াল সিরিয়ালাইজযোগ্য {স্ট্যাটিক ইনট i = 100 টি পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং ... আরআর) প্রয়োগ করে {স্ট্যাটিকশেরিবল = নতুন স্ট্যাটিকসায়ারিয়াল () System.out.println ('সিরিয়ালাইজেশনের সময়, স্থির সদস্যের মান রয়েছে: '+ i) চেষ্টা করুন {ফাইলআউটপুটস্ট্রিম fos = নতুন ফাইলআউটপুটস্ট্রিম (' এফ: ফাইল.সেসর ') অবজেক্টআউটপুটস্ট্রিম oos = নতুন অবজেক্টআউটপুটস্ট্রিম (fos) oos.writeObject (ob) oos.close () i = 99 ফাইলআইপুটপ্রবাহ fis = নতুন ফাইলআইনপুটস্ট্রিম ('এফ: ফাইল.সেসার') অবজেক্ট ইনপুটস্ট্রিম ওআইএস = নতুন অবজেক্ট ইনপুটস্ট্রিম (ফিস) ওব = (স্ট্যাটিকস্রিয়াল) ois.readObject () ois.close () System.out.println ('নির্ধারণের পরে স্থির সদস্যের মান আছে:' + i)} ক্যাচ (ব্যতিক্রম ই) {System.out.println (ই)}}}

আউটপুট:

সিরিয়ালাইজেশনের সময়, স্থির সদস্যের মান থাকে: 100
বিশৃঙ্খলার পরে, স্থির সদস্যের মান হয়: 99

বাহ্যিক ইন্টারফেস

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

বাহ্যিক ইন্টারফেস java.io এ উপলব্ধ এবং এটি দুটি পদ্ধতি সরবরাহ করে:

  • সর্বজনীন শূন্য রাইটিংএক্সটার্নাল (অবজেক্টআউটপুট আউট) আইওএক্সেপশনকে ছুড়ে ফেলে
  • সর্বজনীন শূন্যপদ পাঠ্য বহিরাগত (অবজেক্টইনপুট ইন) আইওএক্সেপশনকে ছুড়ে ফেলে

সিরিয়ালাইজেশন এবং বহিরাগতের মধ্যে মূল পার্থক্য নিম্নরূপ:

  • বাস্তবায়ন : বহির্মুখী ইন্টারফেস ব্যবহারকারীকে বাদ দেয় স্পষ্টভাবে সিরিয়ালযুক্ত করার জন্য অবজেক্টগুলি উল্লেখ করুন। সিরিয়ালাইজেশন ইন্টারফেসে থাকাকালীন সমস্ত বস্তু এবং ভেরিয়েবলগুলি সিরিয়ালায়িত হয় রান-সময়

  • পদ্ধতি : বহির্মুখী ইন্টারফেস দুটি পদ্ধতি নিয়ে গঠিত, যথা:

    • বাইরের ()

    • বাহ্যিক ()

তবে সিরিয়ালাইজযোগ্য ইন্টারফেসে কোনও পদ্ধতি অন্তর্ভুক্ত নেই।

  • প্রক্রিয়া: বহির্মুখী ইন্টারফেসে সিরিয়ালাইজেশন প্রক্রিয়া সরবরাহ করে কাস্টমাইজেশন সিরিয়ালাইজেশন প্রক্রিয়া। তবে, সিরিয়ালাইজেশন ইন্টারফেসটি সরবরাহ করবে ডিফল্ট সিরিয়ালাইজেশন প্রক্রিয়া।

  • পিছনে সামঞ্জস্যতা এবং নিয়ন্ত্রণ: বহির্মুখী ইন্টারফেস সিরিয়ালাইজেশনটিকে নির্বিশেষে সমর্থন করে ভর্সন নিয্ন্ত্র্ন এবং একমাত্র সমস্যা হ'ল সুপার ক্লাসিকে সিরিয়াল করার সময় ব্যবহারকারীর অবশ্যই দায়বদ্ধ হতে হবে। অন্যদিকে, সিরিয়ালাইজেশন ইন্টারফেসের জন্য প্রয়োজন একই সংস্করণ উভয় প্রান্তে জেভিএম এর তবে এটি সুপারক্লাস সহ সমস্ত বস্তু এবং শ্রেণীর স্বয়ংক্রিয় সিরিয়ালাইজেশন অন্তর্ভুক্ত করে।

  • পাবলিক নো-আরগ নির্মাণকারী: বাহ্যিকরণ ইন্টারফেসের প্রয়োজন পাবলিক নো-আরগ কনস্ট্রাক্টর সিরিয়ালযুক্ত অবজেক্টটি পুনর্গঠন করতে। সিরিয়ালাইজেশন ইন্টারফেসের জন্য নো-আরগ কনস্ট্রাক্টরের প্রয়োজন হয় না, পরিবর্তে এটি ব্যবহার করে প্রতিবিম্ব সিরিয়ালযুক্ত বস্তু বা শ্রেণীর পুনর্গঠন করতে।

প্যাকেজ এক্সট্রাট java.io. * ক্লাস ডেমো java.io.Serializable {পাবলিক int একটি পাবলিক স্ট্রিং b পাবলিক ডেমো (int একটি, স্ট্রিং বি) প্রয়োগ করে {this.a = a this.b = b b} শ্রেণি পরীক্ষা {পাবলিক স্ট্যাটিক অকার্যকর মুখ্য (স্ট্রিং [] আরগস) {ডেমো অবজেক্ট = নতুন ডেমো (1, 'এডুরেকাতে আপনাকে স্বাগতম') স্ট্রিং ফাইলের নাম = 'file.ser' চেষ্টা করুন {ফাইলআউটপুটস্ট্রিম ফাইল = নতুন ফাইলআউটপুটস্ট্রিম (ফাইলের নাম) অবজেক্টআউটপুটস্ট্রিম আউট = নতুন অবজেক্টআউটপুটস্ট্রিম (ফাইল) আউট .writObject (অবজেক্ট) আউটক্লোজ () file.close () System.out.println ('অবজেক্ট সিরিয়ালাইজড হয়েছে')} ক্যাচ (আইওএক্সেপশন প্রাক্তন) {System.out.println ('আইওএক্সেপশন ধরা আছে')} ডেমো অবজেক্ট 1 = নাল ট্রাই করুন n ফাইলআইপুট স্ট্রিম ফাইল = নতুন ফাইলআইপুট স্ট্রিম (ফাইলের নাম) অবজেক্ট ইনপুটস্ট্রিম ইন = নতুন অবজেক্ট ইনপুটস্ট্রিম (ফাইল) অবজেক্ট 1 = (ডেমো) ইন.ড্রেডজেক্ট () ইনক্লোজ () ফাইলক্লোজ () সিস্টেম.আউট.প্রিন্টলন ('অবজেক্ট হয়েছে deserialized ') System.out.println (' a = '+ object1.a) System.out.println (' b = '+ object1.b)} ক্যাচ (IOException প্রাক্তন) {System.out.println (' IOException ধরা পড়ে ')} ক্যাচ (ClassNotFoundException প্রাক্তন)। System.out .প্রিন্টলন ('ClassNotFoundException ধরা পড়ে') is}}

ক্ষণস্থায়ী কীওয়ার্ড

ক্ষণস্থায়ী কীওয়ার্ড হ'ল ক সংরক্ষিত কীওয়ার্ড জাভাতে এটি একটি হিসাবে ব্যবহৃত হয় পরিবর্তনশীল পরিবর্তন সিরিয়ালাইজেশন প্রক্রিয়া সময়। ট্রান্সিয়েন্ট কীওয়ার্ড সহ একটি ভেরিয়েবল ঘোষণা করা ভেরিয়েবলকে সিরিয়ালাইজড হওয়া থেকে বিরত রাখে।

সিরিয়াল সংস্করণ ইউআইডি

সিরিয়ালাইজেশন প্রক্রিয়া শুরু হওয়ার আগে, প্রতিটি সিরিয়ালাইজযোগ্য বর্গ / অবজেক্ট একটি এর সাথে যুক্ত হয় অনন্য পরিচয় নম্বর হোস্ট মেশিনের JVM সরবরাহ করেছেন। এই ইউনিক আইডি বলা হয় সিরিয়াল সংস্করণ ইউআইডি । এই ইউআইডিটি প্রাপ্তির শেষের জেভিএম দ্বারা সনাক্তকরণ হিসাবে ব্যবহৃত হয় যা নিশ্চিত হওয়া যায় যে একই জিনিসটি প্রাপ্তির শেষে ডি-সিরিয়ালাইজড হচ্ছে।

জাভাতে সিরিয়ালাইজেশনের বিতর্ক

ওরাকল এর স্থপতিরা জাভা থেকে সিরিয়ালাইজেশন অপসারণ করতে চান কারণ তারা এটিকে বিবেচনা করে 1997 এর ভয়াবহ ভুল । ব্যস্ত গবেষণার পরে, ওরাকল-এর বিকাশকারীরা সিরিয়ালাইজেশন পদ্ধতির নকশায় কয়েকটি ত্রুটিগুলি সনাক্ত করেছিল যা তথ্যগুলির জন্য হুমকিস্বরূপ রয়েছে।

1997 সালে,মার্ক রিইনহোল্ড বলেছেন - ' সিরিয়ালাইজেশনকে আমরা বলতে চাই যে ‘উপহারটি যে উপহার দেয়,’ এবং এটি যে ধরণের উপহার দেয় তা হ'ল সুরক্ষা দুর্বলতা। সম্ভবত সমস্ত জাভা দুর্বলতার একটি তৃতীয়াংশ ক্রমিকায়নের সাথে জড়িত রয়েছে এটি অর্ধেকেরও বেশি হতে পারে। অস্থিরতার কথা উল্লেখ না করে এটি আশ্চর্যজনকভাবে দুর্বলতার উত্স source

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

জাভাতে সিরিয়ালাইজেশন ব্যবহার করার সময় সেরা অনুশীলন

নিম্নলিখিত কয়েকটি সেরা অভ্যাস যা অনুসরণ করা প্রয়োজন

  • এটি ব্যবহারের প্রস্তাব দেওয়া হচ্ছে জাভাদোক @ ক্রমিক ক্ষেত্রগুলি চিহ্নিত করার জন্য সিরিয়াল ট্যাগ serial
  • দ্য .টু ক্রমযুক্ত অবজেক্টগুলি উপস্থাপন করা ফাইলগুলির জন্য এক্সটেনশান ব্যবহার করা পছন্দ করা হয়।
  • কোনও স্থিতিশীল বা ক্ষণস্থায়ী ক্ষেত্রের মধ্য দিয়ে যাওয়ার জন্য এটি প্রস্তাবিত নয় ডিফল্ট সিরিয়ালাইজেশন।
  • বর্ধিত ক্লাস এটি না হলে সিরিয়ালাইজ করা উচিত নয় বাধ্যতামূলক.
  • ইনার ক্লাস সিরিয়ালাইজেশন জড়িত এড়ানো উচিত।

এটি সহ, আমরা এই নিবন্ধটির শেষে এসেছি। আমি আশা করি আপনি জাভাতে সিরিয়ালাইজেশনের মূল বিষয়গুলি, এর প্রকারগুলি এবং এর কার্যকারিতা বুঝতে পেরেছেন।

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

আমাদের জন্য একটি প্রশ্ন আছে? এই 'জাভায় সিরিয়ালাইজেশন' নিবন্ধের মন্তব্য বিভাগে এটি উল্লেখ করুন এবং আমরা যত তাড়াতাড়ি সম্ভব আপনার কাছে ফিরে আসব।