মার্কার ইন্টারফেস এবং গভীর অনুলিপি - 1

"হাই, অ্যামিগো!"

"হাই, বিলাবো!"

"আজ আমি আপনাকে মার্কার ইন্টারফেস সম্পর্কে বলব ।"

"মার্কার ইন্টারফেস হল মেথড ছাড়া ইন্টারফেস। যখন একটি ক্লাস এই ধরনের ইন্টারফেস প্রয়োগ করে, আমরা বলি যে এটি এটি দ্বারা চিহ্নিত করা হয়েছে।"

"এই ইন্টারফেসের উদাহরণগুলির মধ্যে রয়েছে: ক্লোনযোগ্য, সিরিয়ালাইজেবল, রিমোট ।"

" সিরিয়ালাইজেবল ইন্টারফেসটি ক্লাসগুলি চিহ্নিত করতে ব্যবহৃত হয় যা সিরিয়ালাইজেশনকে সমর্থন করে, ইঙ্গিত করে যে এই ক্লাসগুলির উদাহরণগুলি স্বয়ংক্রিয়ভাবে ক্রমিক এবং ডিসিরিয়ালাইজ করা যেতে পারে।"

" রিমোট ইন্টারফেসটি এমন বস্তু সনাক্ত করতে ব্যবহৃত হয় যা রিমোট এক্সিকিউশনকে সমর্থন করে, যেমন পদ্ধতি যা অন্য জাভা ভার্চুয়াল মেশিন এবং/অথবা ভিন্ন কম্পিউটার থেকে শুরু করা যেতে পারে।"

" ক্লোনযোগ্য ইন্টারফেসটি ক্লোনিং সমর্থন করে এমন ক্লাসগুলি চিহ্নিত করতে ব্যবহৃত হয়।"

"ওহ, ক্লোনিং বা অনুলিপি সম্পর্কে।"

"দুই ধরনের অনুলিপি আছে: অগভীর এবং গভীর।"

" অগভীর অনুলিপি একটি বস্তুর একটি অনুলিপি তৈরি করছে, এটি উল্লেখ করে এমন কোনো বস্তুর নকল না করে।"

" গভীর অনুলিপি করার মধ্যে একটি বস্তুর নকল করা জড়িত, যার মধ্যে এটির উল্লেখ করা বস্তুগুলি এবং সেই বস্তুগুলি যেগুলিকে উল্লেখ করে, ইত্যাদি।"

"বিশ্বস্তভাবে একটি গভীর ক্লোন তৈরি করার একটি সত্যিই ভাল উপায় আছে।"

"এই পদ্ধতিটি কাজ করে এমনকি যদি ডেভেলপাররা একটি ক্লাসকে ক্লোনযোগ্য হিসাবে চিহ্নিত করতে ভুলে যায়৷

"কিভাবে আপনি এটা করবেন এখানে:"

1) মেমরিতে একটি বাফার (বাইট অ্যারে) তৈরি করুন।

2) বাফারে অবজেক্ট এবং সাবজেক্টকে সিরিয়ালাইজ করুন।

3) বাফারে সংরক্ষিত অবজেক্ট হায়ারার্কি ডিসিরিয়ালাইজ করুন।

কোড
BigObject objectOriginal = new BigObject();

ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream();
ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer);
outputStream.writeObject(objectOriginal);
outputStream.close();

byte[] buffer = writeBuffer.toByteArray();
ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer);
ObjectInputStream inputStream = new ObjectInputStream(readBuffer);
BigObject objectCopy = (BigObject)inputStream.readObject();

"প্রথম লাইনে, আমরা objectOriginal তৈরি করি , যা আমরা ক্লোন করব। অবজেক্ট এবং এর সমস্ত সাববজেক্ট অবশ্যই সিরিয়ালাইজেশন সমর্থন করবে।"

"তৃতীয় লাইনে, আমরা একটি ByteArrayOutputStream তৈরি করি , যা নতুন ডেটা যুক্ত হওয়ার সাথে সাথে গতিশীলভাবে প্রসারিত হবে (একটি অ্যারেলিস্টের মতো)।"

"লাইন 4-এ, আমরা একটি ObjectOutputStream তৈরি করি , যা সিরিয়ালাইজেশনের জন্য ব্যবহৃত হয়।"

"5 লাইনে, আমরা outputStream ব্যবহার করে অবজেক্ট অরিজিনালকে একটি বাইট অ্যারেতে সিরিয়ালাইজ করি এবং এটিকে রাইটবাফারে সংরক্ষণ করি ।"

"8 লাইনে, আমরা writeBuffer কে একটি সাধারণ বাইট অ্যারেতে রূপান্তর করি। পরে আমরা এই অ্যারে থেকে আমাদের নতুন অবজেক্ট 'পড়ব'।"

"9 নং লাইনে, আমরা বাফারটিকে একটি InputStream এর মত পড়ার জন্য একটি ByteArrayInputStream- এ রূপান্তরিত করি।"

"লাইন 10-এ, আমরা অবজেক্টটি পড়তে (ডিসারিয়ালাইজ) করতে ObjectInputStream কনস্ট্রাক্টরের কাছে readBuffer পাস করি।"

"11 লাইনে, আমরা আমাদের বস্তুটি পড়ি এবং এটিকে একটি BigObject এ রূপান্তর করি ।"

"আপনি কি মনে করেন?"

"ইহা সুন্দর."

"এবং যাইহোক, যখন কোডটি বিভিন্ন রঙে হাইলাইট করা হয়, তখন এটি বোঝা অনেক সহজ।"