JavaRush /وبلاگ جاوا /Random-FA /فرمت های سریال سازی در جاوا

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

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

JSON

نشانه گذاری شی جاوا اسکریپت. شما قبلاً کمی با او آشنا هستید! ما در این سخنرانی در مورد آن صحبت کردیم و در اینجا به سریال سازی در JSON نگاه کردیم . به دلیلی نام خود را گرفته است. اشیاء جاوا تبدیل شده به JSON در واقع دقیقاً شبیه به اشیاء جاوا اسکریپت هستند. برای درک معنای شیء ما نیازی به دانستن جاوا اسکریپت ندارید:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
لازم نیست یک شی را رد کنید. JSON همچنین می تواند دارای آرایه ای از اشیاء باشد:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
از آنجایی که JSON یک شی جاوا اسکریپت است، از فرمت های داده جاوا اسکریپت زیر پشتیبانی می کند:
  • رشته های؛
  • اعداد (عدد)؛
  • اشیاء (شیء)؛
  • آرایه ها (آرایه)؛
  • مقادیر بولی (درست و نادرست)؛
  • خالی.
JSON چه مزایایی دارد؟
  1. قالب قابل خواندن برای انسان اگر کاربر نهایی شما انسان باشد، این یک مزیت آشکار است. به عنوان مثال، سرور شما یک پایگاه داده با برنامه پرواز ذخیره می کند. یک مشتری انسانی با استفاده از یک برنامه وب در حالی که در خانه پشت رایانه نشسته است، داده ها را از این پایگاه داده درخواست می کند. از آنجایی که باید داده ها را در قالبی ارائه کنید که او بتواند آن را درک کند، JSON یک راه حل عالی است.

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

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

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

YAML

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

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

    • !!seq
      توالی مقادیر دلخواه;

    برخی از این ساختارها از جاوا برای شما آشنا خواهند بود! :) به لطف این ویژگی، می توانید ساختارهای داده مختلف را از زبان های برنامه نویسی به فرمت YAML سریال کنید.

  4. امکان استفاده از انکر و نام مستعار

    ترجمه کلمات "لنگر" و "نام مستعار" - "لنگر" و "نام مستعار". در اصل، جوهر این اصطلاحات را در YAML کاملاً دقیق توصیف می کند.

    آنها به شما امکان می دهند یک عنصر را در یک فایل yaml شناسایی کنید و اگر به طور مکرر اتفاق افتاد به آن در بقیه فایل مراجعه کنید. Anchor با استفاده از نماد &و نام مستعار با استفاده از ایجاد می شود *.

    فرض کنید یک فایل با توضیحات کتاب های لئو تولستوی داریم. برای جلوگیری از نوشتن نام نویسنده هر بار به صورت دستی، ما به سادگی یک لنگر "leo" ایجاد می کنیم و در صورت نیاز با استفاده از نام مستعار به آن اشاره می کنیم:

    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 باینری)

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

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

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