আমার যে সমস্যাটি হচ্ছে তা হ'ল: কি সমস্ত ভেরিয়েবল (ইন্ট বা কমপোজেট অবজেক্টের মতো আদিম) ইতিমধ্যে বাইটের ক্রম দ্বারা উপস্থাপিত হয় না?
হ্যা তারা. এখানে সমস্যাটি সেই বাইটগুলির বিন্যাস the একটি সরল int
2, 4 বা 8 বিট দীর্ঘ হতে পারে। এটি বড় বা ছোট এন্ডিয়ান হতে পারে। এটি স্বাক্ষরযুক্ত, 1 এর পরিপূরক বা এমনকি কিছু সুপার এক্সটিক বিট কোডিংয়ে নেগাবাইনারি এর মতো স্বাক্ষরিত হতে পারে।
যদি আপনি কেবল int
মেমোরি থেকে বাইনারি ফেলে দেন এবং এটিকে "সিরিয়ালাইজড" বলে থাকেন, আপনাকে এটি ডিসরিয়ালাইজ করার জন্য বেশ কয়েকটি পুরো কম্পিউটার, অপারেটিং সিস্টেম এবং আপনার প্রোগ্রাম সংযুক্ত করতে হবে। বা কমপক্ষে, তাদের একটি সুনির্দিষ্ট বিবরণ।
সুতরাং সিরিয়ালাইজেশন এত গভীর বিষয় কি করে? একটি ভেরিয়েবল সিরিয়ালাইজ করতে, আমরা কি কেবল এই বাইটগুলি মেমরির মধ্যে নিতে পারি না এবং সেগুলি একটি ফাইলে লিখতে পারি না? আমি কোন জটিলতা মিস করেছি?
একটি সাধারণ অবজেক্টের সিরিয়ালাইজেশন কিছু নিয়ম অনুসারে এটিকে অনেক বেশি লিখে দেওয়া হয়। এই বিধিগুলি প্রচুর এবং সর্বদা সুস্পষ্ট নয়। উদাহরণস্বরূপ xs:integer
, এক্সএমএল-এ বেস -10-এ লেখা হয়। বেস -16 নয়, বেস -9 নয়, তবে 10 নয় It's এটি কোনও গোপন অনুমান নয়, এটি একটি আসল নিয়ম। এবং এই জাতীয় নিয়ম সিরিয়ালকরণকে সিরিয়ালকরণ করে তোলে। কারণ, বেশ কিছু, মেমোরিতে আপনার প্রোগ্রামের বিট লেআউট সম্পর্কে কোনও নিয়ম নেই ।
এটি একটি আইসবার্গের কেবল একটি টিপ ছিল। আসুন সেই সহজতম আদিমগুলির একটি ক্রমের উদাহরণ নিই: একটি সি struct
। আপনি এটা ভাবতে পারেন
struct {
short width;
short height;
long count;
}
প্রদত্ত কম্পিউটার + ওএস এ একটি সংজ্ঞায়িত মেমরি লেআউট আছে? ভাল, এটা না। বর্তমান #pragma pack
সেটিংয়ের উপর নির্ভর করে সংকলক ক্ষেত্রগুলিকে প্যাড করবে। 32-বিট সংকলনের ডিফল্ট সেটিংসে উভয়কে shorts
4 বাইটে প্যাড করা struct
হবে যাতে মেমরিতে 4 বাইটের 3 টি ক্ষেত্র থাকবে actually সুতরাং এখন, আপনাকে কেবল এটি নির্দিষ্ট করতে হবে না যে short
এটি 16 বিট দীর্ঘ, এটি একটি পূর্ণসংখ্যা, 1 এর পরিপূরক নেগেটিভ, বড় বা সামান্য এন্ডিয়ানতে লেখা। আপনার প্রোগ্রামটি সংকলিত কাঠামোগত প্যাকিং সেটিংটিও লিখতে হবে।
সিরিয়ালাইজেশন যা হ'ল এটি অনেকটা: নিয়মের একটি সেট তৈরি করা এবং তাদের সাথে লেগে থাকা।
এরপরে এই বিধিগুলি আরও পরিশীলিত কাঠামো (যেমন পরিবর্তনশীল দৈর্ঘ্যের তালিকাগুলি বা ননলাইনার ডেটা) গ্রহণ করার জন্য বাড়ানো যেতে পারে, মানব পাঠযোগ্যতা, সংস্করণ, পশ্চাদপটে সামঞ্জস্যতা এবং ত্রুটি সংশোধন ইত্যাদির মতো বৈশিষ্ট্যগুলি যুক্ত করা হয়েছে int
তবে আপনি যদি একটি মাত্র লিখতে চান তবে ইতিমধ্যে যথেষ্ট জটিল আপনি কেবল এটি নির্ভরযোগ্যতার সাথে পড়তে সক্ষম হবেন তা নিশ্চিত করতে চান।