CodeGym /בלוג Java /Random-HE /פורמטים של סריאליזציה של Java
John Squirrels
רָמָה
San Francisco

פורמטים של סריאליזציה של Java

פורסם בקבוצה
היי! בואו נדבר על סדרה. אתם בטח זוכרים שכבר קיבלנו שיעורים על סדרה. וכך עשינו :) הנה הראשון והנה השני . אם אינכם זוכרים היטב כיצד עובדת בהמשכה, מדוע יש צורך בהמשכה ואיזה כלים יש ל-Java לביצוע סדרה, תוכלו לעבור על השיעורים הללו. השיעור של היום יעסוק בתיאוריה. אנחנו הולכים להסתכל מקרוב על פורמטים של סדרה. ראשית, נזכיר מהי סדרה. סריאליזציה היא תהליך אחסון המצב של אובייקט ברצף של בתים. דה-סריאליזציה היא תהליך של שחזור אובייקט מבייטים אלו. ניתן לבצע סדרה של אובייקט Java ולשלוח אותו דרך רשת (לדוגמה, למחשב אחר). רצף הבתים יכול להיות מיוצג בפורמטים שונים. אתה מכיר את המושג הזה משימוש רגיל במחשב. לדוגמה, ספר אלקטרוני (או מסמך טקסט פשוט) יכול להיכתב בכמה פורמטים שונים:
  • docx (פורמט Microsoft Word);
  • pdf (פורמט Adobe);
  • mobi (בשימוש נפוץ במכשירי אמזון קינדל);
  • ועוד הרבה יותר (ePub, djvu, fb2 וכו').
בכל אחד מהמקרים, נראה שהמטרה זהה: להציג את הטקסט בצורה הניתנת לקריאה אנושית. ובכל זאת, אנשים המציאו הרבה פורמטים שונים. מבלי להיכנס לפרטי עבודתם, אנו יכולים להניח שהיו להם סיבות טובות. לכל פורמט יש יתרונות וחסרונות משלו לעומת השאר. אולי נוצרו פורמטי סדרה שונים בעקבות אותם עקרונות? ניחוש מצוין, תלמיד! :) זה בדיוק נכון. המציאות היא ששליחת נתונים דרך חוט (או אלחוטי) היא עסק מסובך, והיא כרוכה בהרבה גורמים. מי שולח את הנתונים? לאן? איזה נפח? האם הנמען יהיה אדם או מחשב (כלומר האם הנתונים צריכים להיות קריאים לאדם)? איזה מכשיר יקרא את הנתונים? ברור שהמצבים האלה שונים. זה דבר אחד לשלוח תמונה של 500 KB מסמארטפון אחד לאחר. וזה דבר אחר לגמרי אם אנחנו מדברים על 500 טרה-בייט של נתונים עסקיים שחייבים להיות דחוסים בצורה אופטימלית ולשלוח כמה שיותר מהר. בואו להכיר את הפורמטים העיקריים של סריאליזציה ולשקול את היתרונות והחסרונות של כל אחד מהם!

JSON

סימון אובייקט JavaScript. אתה כבר יודע קצת על הפורמט הזה! דיברנו על זה בשיעור הזה , וכיסינו את ההסדרה ב-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.

לדוגמה, כבר עבדת עם ספריית ג'קסון בשיעור שבו למדנו לבצע סדרה של אובייקטי Java לתוך JSON. אבל מלבד ג'קסון, יש לנו, למשל, GSON , שהיא ספרייה מאוד נוחה מגוגל.

YAML

בתחילה, 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
      רצף של ערכים שרירותיים;

    אתה תזהה חלק מהמבנים הללו מג'אווה! :) זה אומר שניתן להעביר מבני נתונים שונים משפות תכנות ל-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
            }
          ]

פורמטים אחרים של סדרה

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