CodeGym/Java Blog/এলোমেলো/জাভা সিরিয়ালাইজেশন ফরম্যাট
John Squirrels
লেভেল 41
San Francisco

জাভা সিরিয়ালাইজেশন ফরম্যাট

এলোমেলো দলে প্রকাশিত
সদস্যগণ
ওহে! সিরিয়ালাইজেশন সম্পর্কে কথা বলা যাক। আপনি সম্ভবত মনে রাখবেন যে আমরা ইতিমধ্যে সিরিয়ালাইজেশনের পাঠ পেয়েছি। এবং তাই আমরা করেছি :) এখানে প্রথম এবং এখানে দ্বিতীয়. সিরিয়ালাইজেশন কীভাবে কাজ করে, কেন সিরিয়ালাইজেশন প্রয়োজন এবং সিরিয়ালাইজেশনের জন্য জাভা-এর কি কি টুল আছে তা যদি আপনি ভালোভাবে মনে না রাখেন, তাহলে আপনি এই পাঠগুলো চালাতে পারেন। আজকের পাঠ হবে তত্ত্ব নিয়ে। আমরা সিরিয়ালাইজেশন ফরম্যাটগুলি ঘনিষ্ঠভাবে দেখতে যাচ্ছি। প্রথমত, সিরিয়ালাইজেশন কি তা স্মরণ করা যাক। সিরিয়ালাইজেশন হল বাইটের ক্রমানুসারে বস্তুর অবস্থা সংরক্ষণ করার প্রক্রিয়া। ডিসিরিয়ালাইজেশন হল এই বাইটগুলি থেকে একটি বস্তুকে পুনরুদ্ধার করার প্রক্রিয়া। একটি জাভা অবজেক্ট সিরিয়ালাইজ করা যায় এবং একটি নেটওয়ার্কের মাধ্যমে পাঠানো যায় (উদাহরণস্বরূপ, অন্য কম্পিউটারে)। বাইটের ক্রমটি বিভিন্ন বিন্যাসে উপস্থাপন করা যেতে পারে। আপনি সাধারণ কম্পিউটার ব্যবহার থেকে এই ধারণার সাথে পরিচিত। উদাহরণস্বরূপ, একটি ইলেকট্রনিক বই (বা একটি সাধারণ পাঠ্য নথি) বিভিন্ন বিন্যাসের একটি গুচ্ছে লেখা যেতে পারে:
  • docx (মাইক্রোসফ্ট ওয়ার্ড ফরম্যাট);
  • পিডিএফ (অ্যাডোব ফরম্যাট);
  • mobi (সাধারণত Amazon Kindle ডিভাইসে ব্যবহৃত হয়);
  • এবং আরও অনেক কিছু (ePub, djvu, fb2, ইত্যাদি)।
প্রতিটি ক্ষেত্রে, উদ্দেশ্যটি একই বলে মনে হচ্ছে: পাঠ্যটিকে মানব-পাঠযোগ্য আকারে উপস্থাপন করুন। এখনও, মানুষ বিভিন্ন ফর্ম্যাট অনেক উদ্ভাবিত হয়েছে. তাদের কাজের বিবরণে না গিয়ে আমরা ধরে নিতে পারি যে তাদের ভালো কারণ ছিল। প্রতিটি বিন্যাসের নিজস্ব সুবিধা এবং অসুবিধা রয়েছে বাকিগুলির তুলনায়। হয়তো এই একই নীতি অনুসরণ করে বিভিন্ন ক্রমিক বিন্যাস তৈরি করা হয়েছিল? চমৎকার অনুমান, ছাত্র! :) একদম ঠিক। বাস্তবতা হল যে একটি তারের (বা ওয়্যারলেসভাবে) মাধ্যমে ডেটা পাঠানো একটি কঠিন ব্যবসা, এবং এতে অনেকগুলি কারণ জড়িত। ডাটা কে পাঠাচ্ছে? কোথায়? কি আয়তন? প্রাপক কি একজন মানুষ বা কম্পিউটার হবে (অর্থাৎ ডেটা মানুষের-পাঠযোগ্য হওয়া উচিত)? কোন ডিভাইস ডেটা পড়বে? স্পষ্টতই, এই পরিস্থিতিগুলি ভিন্ন। এক স্মার্টফোন থেকে অন্য স্মার্টফোনে 500 KB ইমেজ পাঠানো এক জিনিস। এবং এটি একটি সম্পূর্ণ ভিন্ন জিনিস যদি আমরা 500 টেরাবাইট ব্যবসায়িক ডেটা সম্পর্কে কথা বলি যা অবশ্যই সর্বোত্তমভাবে সংকুচিত হতে হবে এবং যত তাড়াতাড়ি সম্ভব পাঠাতে হবে। আসুন প্রধান ক্রমিক বিন্যাসগুলির সাথে পরিচিত হই এবং তাদের প্রত্যেকের সুবিধা এবং অসুবিধাগুলি বিবেচনা করি!

JSON

জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন। আপনি ইতিমধ্যে এই বিন্যাস সম্পর্কে একটু জানেন! আমরা এই পাঠে এটি সম্পর্কে কথা বলেছি , এবং আমরা এখানেই JSON-এ সিরিয়ালাইজেশন কভার করেছি । এটি একটি কারণে এর নাম পেয়েছে। JSON-এ রূপান্তরিত জাভা বস্তুগুলি আসলে জাভাস্ক্রিপ্টের বস্তুর মতো দেখতে। আমাদের অবজেক্ট বোঝার জন্য আপনাকে জাভাস্ক্রিপ্ট জানার দরকার নেই:
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
আমরা একটি একক বস্তু পাঠানোর মধ্যে সীমাবদ্ধ নই। JSON বিন্যাস বস্তুর একটি অ্যারের প্রতিনিধিত্ব করতে পারে:
[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

 {
   "title": "Demons",
   "author": "Fyodor Dostoyevsky",
   "year": 1872
 },

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
যেহেতু JSON জাভাস্ক্রিপ্ট অবজেক্টের প্রতিনিধিত্ব করে, এটি নিম্নলিখিত জাভাস্ক্রিপ্ট ডেটা ফর্ম্যাটগুলিকে সমর্থন করে:
  • স্ট্রিং
  • সংখ্যা;
  • বস্তু;
  • অ্যারে;
  • বুলিয়ানস (সত্য এবং মিথ্যা);
  • খালি.
JSON এর সুবিধা কি?
  1. মানব-পাঠযোগ্য বিন্যাস। আপনার শেষ ব্যবহারকারী মানুষ হলে এটি একটি সুস্পষ্ট সুবিধা। উদাহরণস্বরূপ, ধরুন আপনার সার্ভারে ফ্লাইটের সময়সূচী সহ একটি ডাটাবেস রয়েছে। একজন মানব গ্রাহক, বাড়িতে তার কম্পিউটারে বসে, একটি ওয়েব অ্যাপ্লিকেশন ব্যবহার করে এই ডাটাবেস থেকে ডেটার জন্য অনুরোধ করে। কারণ আপনাকে এমন একটি বিন্যাসে ডেটা সরবরাহ করতে হবে যা সে বুঝতে পারে, JSON একটি দুর্দান্ত সমাধান।

  2. সরলতা। এটা খুবই সহজ :) উপরে, আমরা দুটি JSON ফাইলের উদাহরণ দিয়েছি। এমনকি যদি আপনি জাভাস্ক্রিপ্ট সম্পর্কে না শুনে থাকেন (জাভাস্ক্রিপ্ট অবজেক্টের কথাই ছেড়ে দিন), আপনি সহজেই সেখানে বর্ণিত অবজেক্টের ধরন বুঝতে পারবেন।
    পুরো JSON ডকুমেন্টেশনে কয়েকটি ছবি সহ একটি ওয়েবপৃষ্ঠা থাকে।

  3. ব্যাপকভাবে ব্যবহার. জাভাস্ক্রিপ্ট হল প্রভাবশালী ফ্রন্ট-এন্ড ভাষা, এবং এর নিজস্ব প্রয়োজনীয়তা রয়েছে। JSON ব্যবহার করা আবশ্যক। অতএব, বিপুল সংখ্যক ওয়েব পরিষেবা JSON কে ডেটা এক্সচেঞ্জ ফর্ম্যাট হিসাবে ব্যবহার করে। প্রতিটি আধুনিক IDE JSON ফর্ম্যাট (IntelliJ IDEA সহ) সমর্থন করে। JSON এর সাথে কাজ করার জন্য সমস্ত ধরণের প্রোগ্রামিং ভাষার জন্য একগুচ্ছ লাইব্রেরি লেখা হয়েছে।

উদাহরণস্বরূপ, আপনি ইতিমধ্যে একটি পাঠে জ্যাকসন লাইব্রেরির সাথে কাজ করেছেন যেখানে আমরা জাভা অবজেক্টগুলিকে JSON-এ সিরিয়ালাইজ করতে শিখেছি। কিন্তু জ্যাকসন ছাড়াও, আমাদের কাছে রয়েছে, উদাহরণস্বরূপ, GSON , যা Google থেকে একটি খুব সুবিধাজনক লাইব্রেরি।

YAML

প্রাথমিকভাবে, YAML ছিল "এখনও আরেকটি মার্কআপ ভাষা"। যখন এটি শুরু হয়েছিল, তখন এটি XML-এর প্রতিযোগী হিসাবে অবস্থান করেছিল। এখন, সময়ের সাথে সাথে, YAML এর অর্থ এসেছে "YAML মার্কআপ ভাষা নয়"। এটা ঠিক কি? আসুন কল্পনা করি যে একটি কম্পিউটার গেমের চরিত্রগুলিকে উপস্থাপন করার জন্য আমাদের 3টি ক্লাস তৈরি করতে হবে: ওয়ারিয়র, ম্যাজ এবং থিফ। তাদের নিম্নলিখিত বৈশিষ্ট্য থাকবে: শক্তি, তত্পরতা, সহনশীলতা, অস্ত্রের একটি সেট। আমাদের ক্লাসগুলি বর্ণনা করে এমন একটি YAML ফাইল দেখতে কেমন হবে তা এখানে:
classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear

 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
একটি YAML ফাইলের একটি গাছের গঠন রয়েছে: কিছু উপাদান অন্যগুলিতে নেস্ট করা হয়। আমরা নির্দিষ্ট সংখ্যক স্পেস ব্যবহার করে নেস্টিং নিয়ন্ত্রণ করতে পারি, যা আমরা প্রতিটি স্তর বোঝাতে ব্যবহার করি। YAML বিন্যাসের সুবিধা কি?
  1. মানব পাঠযোগ্য. আবার, এমনকি একটি বর্ণনা ছাড়াই একটি YAML ফাইল দেখে, আপনি এটি বর্ণনা করে এমন বস্তুগুলি সহজেই বুঝতে পারবেন। YAML এতটাই মানুষের পঠনযোগ্য যে ওয়েবসাইট yaml.org হল একটি সাধারণ YAML ফাইল :)

  2. কম্প্যাক্টনেস। ফাইলের কাঠামোটি স্পেস ব্যবহার করে তৈরি করা হয়েছে: বন্ধনী বা উদ্ধৃতি চিহ্ন ব্যবহার করার দরকার নেই।

  3. প্রোগ্রামিং ভাষার জন্য নেটিভ ডেটা স্ট্রাকচারের জন্য সমর্থন। JSON এবং অন্যান্য অনেক ফরম্যাটের তুলনায় YAML এর বিশাল সুবিধা হল এটি বিভিন্ন ডেটা স্ট্রাকচারকে সমর্থন করে। তারা সংযুক্ত:

    • !!ম্যাপ
      কী-মানের জোড়ার একটি ক্রমবিহীন সেট যাতে সদৃশ হতে পারে না;

    • !!ওমাপ
      কী-মানের জোড়ার একটি ক্রমানুসারে যা সদৃশ হতে পারে না;

    • !!জোড়া:
      কী-মানের জোড়ার একটি আদেশকৃত ক্রম যাতে সদৃশ থাকতে পারে;


    • একে অপরের সমান নয় এমন মানগুলির একটি অবিন্যস্ত ক্রম সেট করুন ;

    • !!seq
      নির্বিচারে মানগুলির একটি ক্রম;

    আপনি জাভা থেকে এই কাঠামোর কিছু চিনতে পারবেন! :) এর মানে হল যে প্রোগ্রামিং ল্যাঙ্গুয়েজ থেকে বিভিন্ন ডাটা স্ট্রাকচার YAML-এ সিরিয়ালাইজ করা যায়।

  4. অ্যাঙ্কর এবং উপনাম ব্যবহার করার ক্ষমতা

    এই মার্কারগুলি আপনাকে একটি YAML ফাইলের কিছু উপাদান সনাক্ত করার অনুমতি দেয় এবং তারপরে এটি বারবার ঘটলে বাকি ফাইলগুলিতে এটি উল্লেখ করুন। চিহ্ন ব্যবহার করে একটি অ্যাঙ্কর তৈরি করা হয় এবং * ব্যবহার করে একটি উপনাম তৈরি করা হয়

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

    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859

    যখন এই ফাইলটি পার্স করা হয়, তখন "লিও টলস্টয়" মানটি সঠিক জায়গায় প্রতিস্থাপিত হয় যেখানে আমাদের উপনাম রয়েছে৷

  5. YAML অন্যান্য বিন্যাসে ডেটা এম্বেড করতে পারে। উদাহরণস্বরূপ, JSON:

    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]

অন্যান্য ক্রমিক বিন্যাস

এক্সএমএল

এই বিন্যাস একটি ট্যাগ ট্রি উপর ভিত্তি করে.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
প্রতিটি উপাদান একটি খোলা এবং বন্ধ ট্যাগ (<> এবং </>) নিয়ে গঠিত। প্রতিটি উপাদান নেস্টেড উপাদান থাকতে পারে. XML হল একটি সাধারণ বিন্যাস যা JSON এবং YAML এর মতই ভালো (যদি আমরা বাস্তব প্রকল্পের কথা বলি)। এক্সএমএল সম্পর্কে আমাদের একটি পৃথক পাঠ রয়েছে ।

BSON (বাইনারী JSON)

এর নাম থেকে বোঝা যায়, BSON JSON-এর মতোই, কিন্তু এটি মানব-পাঠযোগ্য নয় এবং বাইনারি ডেটা ব্যবহার করে। ফলস্বরূপ, এটি ছবি এবং অন্যান্য সংযুক্তি সংরক্ষণ এবং স্থানান্তর করার জন্য খুব ভাল। এছাড়াও, BSON কিছু ডেটা প্রকার সমর্থন করে যা JSON-এ উপলব্ধ নয়। উদাহরণস্বরূপ, একটি BSON ফাইলে একটি তারিখ (মিলিসেকেন্ড বিন্যাসে) বা জাভাস্ক্রিপ্ট কোডের একটি অংশও অন্তর্ভুক্ত থাকতে পারে। জনপ্রিয় MongoDB NoSQL ডাটাবেস BSON ফর্ম্যাটে তথ্য সঞ্চয় করে।

অবস্থান ভিত্তিক প্রোটোকল

কিছু পরিস্থিতিতে, আমাদের পাঠানো ডেটার পরিমাণ ব্যাপকভাবে কমাতে হবে (উদাহরণস্বরূপ, যদি আমাদের অনেক ডেটা থাকে এবং লোড কমাতে হয়)। এই পরিস্থিতিতে, আমরা অবস্থান-ভিত্তিক প্রোটোকল ব্যবহার করতে পারি, অর্থাৎ, প্যারামিটারের নাম ছাড়াই প্যারামিটারের মান পাঠাতে পারি।
"Leo Tolstoy" | "Anna Karenina" | 1873
এই ফর্ম্যাটে ডেটা একটি সম্পূর্ণ JSON ফাইলের চেয়ে কয়েকগুণ কম জায়গা নেয়। অবশ্যই, অন্যান্য ক্রমিক বিন্যাস আছে, কিন্তু আপনার এখনই সেগুলির সবগুলি জানার দরকার নেই :) অ্যাপ্লিকেশনগুলি তৈরি করার সময় আপনি যদি বর্তমান শিল্পের মানক বিন্যাসের সাথে পরিচিত হন এবং তাদের সুবিধাগুলি এবং কীভাবে সেগুলি একটি থেকে আলাদা তা মনে রাখতে পারেন অন্য এবং এর সাথে, আমাদের পাঠ শেষ হয় :) আজকে কয়েকটি কাজ সমাধান করতে ভুলবেন না! পরের বার পর্যন্ত! :)
মন্তব্য
  • জনপ্রিয়
  • নতুন
  • পুরানো
মন্তব্য লেখার জন্য তোমাকে অবশ্যই সাইন ইন করতে হবে
এই পাতায় এখনও কোনো মন্তব্য নেই