CodeGym /مدونة جافا /Random-AR /تنسيقات تسلسل جافا
John Squirrels
مستوى
San Francisco

تنسيقات تسلسل جافا

نشرت في المجموعة
أهلاً! دعونا نتحدث عن التسلسل. ربما تتذكر أننا تلقينا بالفعل دروسًا حول التسلسل. وهكذا فعلنا :) هنا الأول وهنا الثاني . إذا كنت لا تتذكر جيدًا كيفية عمل التسلسل، وسبب الحاجة إلى التسلسل، وما هي الأدوات التي تمتلكها Java للتسلسل، فيمكنك تشغيل هذه الدروس. درس اليوم سيكون عن النظرية. سنلقي نظرة فاحصة على تنسيقات التسلسل. أولا، دعونا نتذكر ما هو التسلسل. التسلسل هو عملية تخزين حالة الكائن في تسلسل من البايتات. إلغاء التسلسل هو عملية استعادة كائن من هذه البايتات. يمكن إجراء تسلسل لكائن Java وإرساله عبر شبكة (على سبيل المثال، إلى كمبيوتر آخر). يمكن تمثيل تسلسل البايتات بتنسيقات مختلفة. أنت على دراية بهذا المفهوم من خلال الاستخدام العادي للكمبيوتر. على سبيل المثال، يمكن كتابة كتاب إلكتروني (أو مستند نصي بسيط) بمجموعة من التنسيقات المختلفة:
  • دوكإكس (تنسيق مايكروسوفت وورد)؛
  • pdf (تنسيق أدوبي)؛
  • mobi (يشيع استخدامه على أجهزة Amazon Kindle)؛
  • وأكثر من ذلك بكثير (ePub، djvu، fb2، وما إلى ذلك).
وفي كل حالة، يبدو الهدف هو نفسه: تقديم النص في شكل يمكن للإنسان قراءته. ومع ذلك، فقد اخترع الناس الكثير من الأشكال المختلفة. وبدون الخوض في تفاصيل عملهم، يمكننا أن نفترض أن لديهم أسباب وجيهة. كل تنسيق له مزاياه وعيوبه مقارنة بالباقي. ربما تم إنشاء تنسيقات تسلسل مختلفة باتباع نفس المبادئ؟ تخمين ممتاز أيها الطالب! :) هذا صحيح تماما. والحقيقة هي أن إرسال البيانات عبر الأسلاك (أو لاسلكيًا) هو عمل صعب، ويتضمن العديد من العوامل. من يرسل البيانات؟ إلى أين؟ ما حجم؟ هل سيكون المستلم إنسانًا أم كمبيوتر (أي يجب أن تكون البيانات قابلة للقراءة بواسطة الإنسان)؟ ما هو الجهاز الذي سوف يقرأ البيانات؟ من الواضح أن هذه المواقف مختلفة. يعد إرسال صورة بحجم 500 كيلو بايت من هاتف ذكي إلى آخر أمرًا واحدًا. والأمر مختلف تمامًا إذا كنا نتحدث عن 500 تيرابايت من بيانات الأعمال التي يجب ضغطها على النحو الأمثل وإرسالها في أسرع وقت ممكن. دعونا نتعرف على تنسيقات التسلسل الرئيسية وننظر في مزايا وعيوب كل منها!

JSON

جافا سكريبت تدوين كائن. أنت تعرف بالفعل القليل عن هذا التنسيق! لقد تحدثنا عنها في هذا الدرس ، وقمنا بتغطية التسلسل إلى JSON هنا . حصلت على اسمها لسبب ما. كائنات Java المحولة إلى JSON تبدو تمامًا مثل الكائنات الموجودة في JavaScript. لا تحتاج إلى معرفة JavaScript لفهم كائننا:
{
   "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 يمثل كائنات JavaScript، فهو يدعم تنسيقات بيانات JavaScript التالية:
  • سلاسل؛
  • أعداد؛
  • أشياء؛
  • صفائف.
  • القيم المنطقية (الصواب والخطأ)؛
  • باطل.
ما هي فوائد JSON؟
  1. تنسيق يمكن قراءته بواسطة الإنسان. هذه ميزة واضحة إذا كان المستخدم النهائي الخاص بك إنسانًا. على سبيل المثال، لنفترض أن الخادم الخاص بك لديه قاعدة بيانات تحتوي على جدول الرحلات الجوية. يطلب العميل البشري، الذي يجلس أمام جهاز الكمبيوتر الخاص به في المنزل، البيانات من قاعدة البيانات هذه باستخدام تطبيق ويب. نظرًا لأنك تحتاج إلى تقديم البيانات بتنسيق يمكنه فهمه، فإن JSON يعد حلاً رائعًا.

  2. بساطة. الأمر بسيط جدًا :) أعلاه، قدمنا ​​مثالاً لملفين JSON. وحتى إذا لم تكن قد سمعت عن JavaScript (ناهيك عن كائنات JavaScript)، فيمكنك بسهولة فهم نوع الكائنات الموصوفة هناك.
    تتكون وثائق JSON بأكملها من صفحة ويب تحتوي على صورتين.

  3. استخدام شائع. JavaScript هي لغة الواجهة الأمامية السائدة، ولها متطلباتها الخاصة. استخدام JSON أمر لا بد منه. لذلك، يستخدم عدد كبير من خدمات الويب JSON كتنسيق لتبادل البيانات. يدعم كل IDE حديث تنسيق JSON (بما في ذلك IntelliJ IDEA). تمت كتابة مجموعة من المكتبات لجميع أنواع لغات البرمجة لتمكين العمل مع JSON.

على سبيل المثال، لقد عملت بالفعل مع مكتبة Jackson في درس تعلمنا فيه إجراء تسلسل لكائنات Java في JSON. ولكن إلى جانب جاكسون، لدينا، على سبيل المثال، GSON ، وهي مكتبة مريحة للغاية من Google.

يامل

في البداية، كان YAML يرمز إلى "لغة ترميزية أخرى". عندما بدأت، تم وضعها كمنافس لـ XML. الآن، مع مرور الوقت، أصبح YAML يعني "YAML Ain't Markup Language". ما هو بالضبط؟ لنتخيل أننا بحاجة إلى إنشاء 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. دعم هياكل البيانات الأصلية للغات البرمجة. الميزة الكبيرة لـ YAML مقارنة بـ JSON والعديد من التنسيقات الأخرى هي أنها تدعم هياكل البيانات المختلفة. يشملوا:

    • !!map
      مجموعة غير مرتبة من أزواج القيمة الرئيسية التي لا يمكن أن تحتوي على نسخ مكررة؛

    • !!omap
      تسلسل مرتب لأزواج القيمة الرئيسية التي لا يمكن أن تحتوي على نسخ مكررة؛

    • !!أزواج:
      تسلسل مرتب لأزواج القيمة الرئيسية التي يمكن أن تحتوي على نسخ مكررة؛

    • !!set
      تسلسل غير مرتب من القيم التي لا تساوي بعضها البعض؛

    • !!seq
      سلسلة من القيم العشوائية؛

    سوف تتعرف على بعض هذه الهياكل من Java! :) هذا يعني أنه يمكن إجراء تسلسل لهياكل البيانات المختلفة من لغات البرمجة في 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 تضمين البيانات بتنسيقات أخرى. على سبيل المثال، جسون:

    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 تاريخًا (بتنسيق مللي ثانية) أو حتى جزءًا من كود JavaScript. تقوم قاعدة بيانات MongoDB NoSQL الشهيرة بتخزين المعلومات بتنسيق BSON.

البروتوكول القائم على الموقف

في بعض المواقف، نحتاج إلى تقليل كمية البيانات المرسلة بشكل كبير (على سبيل المثال، إذا كان لدينا الكثير من البيانات ونحتاج إلى تقليل الحمل). في هذه الحالة، يمكننا استخدام البروتوكول القائم على الموضع، أي إرسال قيم المعلمات دون أسماء المعلمات نفسها.
"Leo Tolstoy" | "Anna Karenina" | 1873
تأخذ البيانات بهذا التنسيق مساحة أقل عدة مرات من ملف JSON الكامل. بالطبع، هناك تنسيقات تسلسلية أخرى، لكنك لست بحاجة إلى معرفتها جميعًا الآن :) من الجيد أن تكون على دراية بالتنسيقات القياسية الصناعية الحالية عند تطوير التطبيقات، وتتذكر مزاياها وكيف تختلف عن بعضها آخر. وبهذا ينتهي درسنا :) لا تنس حل بعض المهام اليوم! حتى المرة القادمة! :)
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION