যদি আমরা দুটি বস্তুর একে অপরের উল্লেখ করে সিরিয়ালাইজ করি এবং ডিজিটালাইজ করি তবে কী হবে?


15

এটি আরও স্পষ্ট করতে, এটি একটি দ্রুত উদাহরণ:

class A implements Serializable { public B b; }
class B implements Serializable { public A a; }
A a = new A();
B b = new B();
a.b = b;
b.a = a;

সুতরাং যদি আমরা একটি এবং বি অবজেক্টগুলিকে একটি ফাইলে সিরিয়ালাইজ করি এবং সেই ফাইলটি থেকে ডিসরিয়াল করি তবে কী হবে?

আমি ভেবেছিলাম আমরা 4 টি অবজেক্ট পেয়েছি, প্রতিটির 2 টি। সনাক্তকারী বস্তু কিন্তু বিভিন্ন দৃষ্টান্ত different

তবে আমি নিশ্চিত নই যে অন্য কিছু আছে কি না তা সঠিক বা ভুল।

যদি কোনও প্রযুক্তির উত্তর দেওয়ার প্রয়োজন হয় তবে দয়া করে জাভা ভিত্তিক চিন্তা করুন।

ধন্যবাদ.

উত্তর:


25

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

সুতরাং, উদাহরণস্বরূপ, আপনি যদি স্ট্রিমে উদাহরণ "a" লিখে থাকেন, তবে স্ট্রিমটি সেই বস্তুকে একটি অনন্য আইডি দেয় (আসুন "1" বলি)। "ক" এর সিরিয়ালাইজেশনের অংশ হিসাবে, আপনাকে "খ" সিরিয়ালাইজ করতে হবে, এবং স্ট্রিমটি এটিকে অন্য আইডি দেয় ("2")। আপনি যদি তখন স্ট্রিমটিতে "বি" লিখেন তবে কেবলমাত্র লিখিত জিনিসটি হ'ল আইডি, আসল অবজেক্ট নয়।

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

এই হল কিভাবে এপিআই ডক্স এটি বর্ণনা:

রেফারেন্স শেয়ারিং মেকানিজম ব্যবহার করে একটি একক বস্তুর একাধিক উল্লেখগুলি এনকোড করা হয় যাতে বস্তুর গ্রাফগুলি যখন মূলটি লেখা হয়েছিল ঠিক একই আকারে পুনরুদ্ধার করা যায়

এই আচরণটি সমস্যার কারণ হতে পারে: যেহেতু স্ট্রিমটি প্রতিটি অবজেক্টের জন্য কঠোর রেফারেন্স ধারণ করে (যাতে আইডিটি স্থাপন করার সময় এটি জানতে পারে), আপনি যদি স্ট্রিমটিতে প্রচুর ক্ষণস্থায়ী বস্তু লিখেন তবে আপনি মেমরির বাইরে চলে যেতে পারেন। আপনি কল করে এটি সমাধান করুন reset()


সুতরাং এটি deserialization পরে মূল অবস্থায় ফিরে আসবে, তাই না? একে একে সিরিয়ালের আগে যেমন একে অপরের উল্লেখ রয়েছে?
সেরেগেথ্রিন

1
হ্যাঁ, আপনি একে অপরকে রেফারেন্স করে কেবল 2 টি অবজেক্ট দিয়ে শেষ করেছেন।
হেক্টরেক্ট

1
আমি বিশ্বাস করতে পারি না জাভা এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে। আমি মুগ্ধ
ক্রুনচার

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