JavaRush /בלוג Java /Random-HE /פורמטי סדרה ב-Java

פורמטי סדרה ב-Java

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

JSON

סימון אובייקט JavaScript. אתה כבר קצת מכיר אותו! דיברנו על זה בהרצאה הזו , והסתכלנו על סדרה ב-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. נָפוֹץ. JavaScript היא שפת החזית הדומיננטית, והיא מכתיבה את תנאיה. שימוש ב-JSON הוא חובה. לכן, מספר עצום של שירותי אינטרנט משתמשים ב-JSON כפורמט להחלפת נתונים. כל IDE מודרני תומך בפורמט JSON (כולל Intellij IDEA). חבורה של ספריות נכתבו לעבודה עם JSON עבור כל שפות התכנות האפשריות.

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

YAML

בתחילת קיומה, היא עמדה בשם Yet Another Markup Language - "שפת סימון נוספת". בזמנו הוא מוצב כמתחרה ל-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
      רצף מסודר של צמדי מפתח:ערך ללא אפשרות של כפילויות;

    • !!זוגות:
      רצף מסודר של זוגות מפתח:ערך עם אפשרות של כפילויות;

    • !!קבע
      רצף לא מסודר של ערכים שאינם שווים זה לזה;

    • !!seq
      רצף של ערכים שרירותיים;

    חלק מהמבנים הללו יהיו מוכרים לכם מג'אווה! :) הודות לתכונה זו, אתה יכול לסידור מבני נתונים שונים משפות תכנות לפורמט YAML.

  4. יכולת שימוש בעוגן ובכינוי

    תרגום המילים "עוגן" ו"כינוי" - "עוגן" ו"שם בדוי". באופן עקרוני, הוא מתאר די במדויק את המהות של מונחים אלה ב-YAML.

    הם מאפשרים לזהות אלמנט בקובץ 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 בינארי)

כפי ששמו מרמז, הוא דומה מאוד ל-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