CodeGym /وبلاگ جاوا /Random-FA /فرمت های سریال سازی جاوا
John Squirrels
مرحله
San Francisco

فرمت های سریال سازی جاوا

در گروه منتشر شد
سلام! بیایید در مورد سریال سازی صحبت کنیم. احتمالاً به یاد دارید که قبلاً در مورد سریال سازی درس هایی داشته ایم. و ما این کار را کردیم :) اینجا اولی و اینجا دومی است . اگر به خوبی به خاطر ندارید که سریال‌سازی چگونه کار می‌کند، چرا سریال‌سازی مورد نیاز است و جاوا چه ابزارهایی برای سریال‌سازی دارد، می‌توانید این درس‌ها را اجرا کنید. درس امروز در مورد تئوری خواهد بود. ما قصد داریم نگاهی دقیق تر به فرمت های سریال سازی بیندازیم. ابتدا بیایید به یاد بیاوریم که سریال سازی چیست. سریال سازی فرآیند ذخیره سازی وضعیت یک شی در یک دنباله از بایت ها است. Deserialization فرآیند بازیابی یک شی از این بایت ها است. یک شی جاوا می تواند سریال شود و از طریق یک شبکه (مثلاً به رایانه دیگری) ارسال شود. دنباله بایت ها را می توان در قالب های مختلف نشان داد. شما با این مفهوم از استفاده معمولی کامپیوتر آشنا هستید. به عنوان مثال، یک کتاب الکترونیکی (یا یک سند متنی ساده) را می توان در قالب های مختلف نوشت:
  • docx (فرمت مایکروسافت ورد)؛
  • pdf (فرمت Adobe)؛
  • mobi (معمولاً در دستگاه های آمازون Kindle استفاده می شود)؛
  • و خیلی بیشتر (ePub، djvu، fb2، و غیره).
در هر مورد، هدف یکسان به نظر می رسد: ارائه متن به شکلی قابل خواندن برای انسان. با این حال، مردم بسیاری از قالب های مختلف را اختراع کرده اند. بدون پرداختن به جزئیات کارشان، می توان فرض کرد که آنها دلایل موجهی داشته اند. هر فرمت نسبت به بقیه مزایا و معایب خاص خود را دارد. شاید قالب‌های سریال‌سازی مختلف با رعایت همین اصول ایجاد شده باشد؟ حدس عالی، دانشجو! :) دقیقا همینطوره. واقعیت این است که ارسال داده ها از طریق سیم (یا به صورت بی سیم) کاری دشوار است و عوامل زیادی را شامل می شود. چه کسی داده ها را ارسال می کند؟ به کجا؟ چه حجمی؟ آیا گیرنده یک انسان خواهد بود یا یک کامپیوتر (یعنی باید داده ها قابل خواندن توسط انسان باشد)؟ چه دستگاهی داده ها را می خواند؟ بدیهی است که این شرایط متفاوت است. ارسال یک تصویر 500 کیلوبایتی از یک گوشی هوشمند به گوشی دیگر یک چیز است. و اگر ما در مورد 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 اشیاء جاوا اسکریپت را نشان می دهد، از فرمت های داده جاوا اسکریپت زیر پشتیبانی می کند:
  • رشته های؛
  • شماره؛
  • اشیاء؛
  • آرایه ها
  • Booleans (درست و نادرست)؛
  • خالی.
مزایای JSON چیست؟
  1. قالب قابل خواندن برای انسان اگر کاربر نهایی شما انسان باشد، این یک مزیت آشکار است. به عنوان مثال، فرض کنید سرور شما یک پایگاه داده با برنامه پروازها دارد. یک مشتری انسانی که در خانه پشت کامپیوتر خود نشسته است، با استفاده از یک برنامه وب، داده ها را از این پایگاه داده درخواست می کند. از آنجایی که باید داده ها را در قالبی ارائه دهید که او بتواند آن را درک کند، JSON یک راه حل عالی است.

  2. سادگی. فوق العاده ساده است :) در بالا، نمونه ای از دو فایل JSON ارائه دادیم. و حتی اگر در مورد جاوا اسکریپت چیزی نشنیده باشید (چه رسد به اشیاء جاوا اسکریپت)، به راحتی می توانید نوع اشیاء توصیف شده در آنجا را درک کنید.
    کل مستندات JSON شامل یک صفحه وب با چند عکس است.

  3. استفاده گسترده. جاوا اسکریپت زبان فرانت اند غالب است و الزامات خاص خود را دارد. استفاده از JSON یک امر ضروری است. بنابراین، تعداد زیادی از خدمات وب از JSON به عنوان فرمت تبادل داده استفاده می کنند. هر IDE مدرن از فرمت JSON (از جمله IntelliJ IDEA) پشتیبانی می کند. مجموعه ای از کتابخانه ها برای انواع زبان های برنامه نویسی نوشته شده اند تا کار با JSON را فعال کنند.

به عنوان مثال، شما قبلاً با کتابخانه جکسون در درسی کار کرده اید که در آن ما یاد گرفتیم که اشیاء جاوا را در JSON سریال کنیم. اما علاوه بر جکسون، به عنوان مثال، GSON را داریم که یک کتابخانه بسیار راحت از گوگل است.

YAML

در ابتدا، YAML مخفف "Yet Another Markup Language" بود. هنگامی که شروع به کار کرد، به عنوان یک رقیب برای XML قرار گرفت. اکنون، با گذشت زمان، YAML به معنای "YAML Ain't Markup Language" است. دقیقا چیه؟ بیایید تصور کنیم که برای نمایش شخصیت ها در یک بازی کامپیوتری باید 3 کلاس ایجاد کنیم: Warrior، Mage و Thief. آنها ویژگی های زیر را خواهند داشت: قدرت، چابکی، استقامت، مجموعه ای از سلاح ها. در اینجا یک فایل 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. پشتیبانی از ساختارهای داده بومی برای زبان های برنامه نویسی. مزیت بزرگ YAML نسبت به JSON و بسیاری از فرمت های دیگر این است که از ساختارهای داده مختلف پشتیبانی می کند. آنها عبارتند از:

    • !!map
      مجموعه ای نامرتب از جفت های کلید-مقدار که نمی توانند تکراری داشته باشند.

    • !!map
      یک دنباله مرتب شده از جفت های کلید-مقدار که نمی توانند تکراری داشته باشند.

    • !!pairs:
      دنباله ای مرتب شده از جفت های کلید-مقدار که می توانند تکراری داشته باشند.

    • !!set
      یک دنباله نامرتب از مقادیر که با یکدیگر برابر نیستند.

    • !!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

    هنگامی که این فایل تجزیه می شود، مقدار "Leo Tolstoy" در مکان های مناسبی که نام مستعار خود را داریم جایگزین می شود.

  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
            }
          ]

سایر فرمت های سریال سازی

XML

این قالب بر اساس درخت تگ است.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
هر عنصر از یک تگ باز و بسته (<> و </>) تشکیل شده است. هر عنصر می تواند عناصر تودرتو داشته باشد. XML یک فرمت رایج است که به خوبی JSON و YAML است (اگر در مورد پروژه های واقعی صحبت می کنیم). ما یک درس جداگانه در مورد XML داریم .

BSON (JSON باینری)

همانطور که از نام آن مشخص است، BSON بسیار شبیه به JSON است، اما برای انسان قابل خواندن نیست و از داده های باینری استفاده می کند. در نتیجه برای ذخیره و انتقال تصاویر و سایر پیوست ها بسیار خوب است. علاوه بر این، BSON از برخی از انواع داده‌هایی که در JSON موجود نیستند، پشتیبانی می‌کند. به عنوان مثال، یک فایل BSON می تواند شامل یک تاریخ (در قالب میلی ثانیه) یا حتی یک قطعه کد جاوا اسکریپت باشد. پایگاه داده محبوب MongoDB NoSQL اطلاعات را در قالب BSON ذخیره می کند.

پروتکل مبتنی بر موقعیت

در برخی شرایط، ما باید حجم داده های ارسالی را به شدت کاهش دهیم (مثلاً اگر داده های زیادی داریم و نیاز به کاهش بار داریم). در این شرایط می توانیم از پروتکل مبتنی بر موقعیت استفاده کنیم، یعنی مقادیر پارامتر را بدون نام خود پارامترها ارسال کنیم.
"Leo Tolstoy" | "Anna Karenina" | 1873
اطلاعات در این فرمت چندین برابر فضای کمتری نسبت به یک فایل JSON کامل اشغال می کند. البته فرمت های سریال سازی دیگری نیز وجود دارد، اما لازم نیست فعلاً همه آنها را بدانید :) اگر در هنگام توسعه برنامه ها با فرمت های استاندارد فعلی صنعت آشنا باشید و مزیت های آنها و تفاوت آنها با یکی را به خاطر بسپارید خوب است. یکی دیگر. و با این، درس ما به پایان می رسد :) فراموش نکنید که امروز چند کار را حل کنید! تا دفعه بعد! :)
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION