JavaRush /مدونة جافا /Random-AR /تنسيقات التسلسل في جافا

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

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

JSON

جافا سكريبت تدوين كائن. أنت بالفعل على دراية به قليلاً! لقد تحدثنا عنها في هذه المحاضرة ، ونظرنا إلى التسلسل في JSON هنا . حصلت على اسمها لسبب ما. تبدو كائنات Java المحولة إلى JSON تمامًا مثل كائنات JavaScript. لا تحتاج إلى معرفة JavaScript لفهم معنى كائننا:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
ليس من الضروري تمرير كائن واحد. يمكن أن يحتوي JSON أيضًا على مجموعة من الكائنات:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
نظرًا لأن JSON عبارة عن كائن JavaScript، فهو يدعم تنسيقات بيانات JavaScript التالية:
  • سلاسل؛
  • أرقام (عدد)؛
  • كائنات (كائن) ؛
  • صفائف (صفيف) ؛
  • القيم المنطقية (الصواب والخطأ)؛
  • باطل.
ما هي المزايا التي يتمتع بها JSON؟
  1. تنسيق يمكن قراءته بواسطة الإنسان. هذه ميزة واضحة إذا كان المستخدم النهائي الخاص بك إنسانًا. على سبيل المثال، يقوم الخادم الخاص بك بتخزين قاعدة بيانات تحتوي على جداول الرحلات. يطلب العميل البشري البيانات من قاعدة البيانات هذه باستخدام تطبيق ويب أثناء جلوسه في المنزل أمام الكمبيوتر. نظرًا لأنك تحتاج إلى تقديم البيانات بتنسيق يمكنه فهمه، فإن JSON يعد حلاً رائعًا.

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

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

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

يامل

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

    • !!map
      مجموعة غير مرتبة من أزواج المفاتيح: القيمة مع عدم وجود إمكانية للتكرارات؛

    • !!omap
      تسلسل مرتب لأزواج المفاتيح: القيمة مع عدم وجود احتمال للتكرار؛

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

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

    • !!seq
      تسلسل القيم التعسفية؛

    بعض هذه الهياكل ستكون مألوفة لك من Java! :) بفضل هذه الميزة، يمكنك إجراء تسلسل لهياكل البيانات المختلفة من لغات البرمجة إلى تنسيق YAML.

  4. القدرة على استخدام المرساة والاسم المستعار

    ترجمة الكلمات "مرساة" و "اسم مستعار" - "مرساة" و "اسم مستعار". من حيث المبدأ، فإنه يصف بدقة جوهر هذه المصطلحات في YAML.

    إنها تسمح لك بتحديد عنصر في ملف yaml، والإشارة إليه في بقية الملف في حالة تكراره. يتم إنشاء المرساة باستخدام الرمز &ويتم إنشاء الاسم المستعار باستخدام *.

    لنفترض أن لدينا ملفًا يحتوي على أوصاف لكتب ليو تولستوي. لتجنب كتابة اسم المؤلف يدويًا في كل مرة، سنقوم ببساطة بإنشاء رابط "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. على سبيل المثال، جسون:

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

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

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