
Person עם אותם שדות כמו קודם: byte age, float salary, String fullName, int zipCode. מוסיפים באמצעות Alt Insert בנאי, getters ו-setters, ו-toString.implements Serializable: זה מה שמאפשר למערכת לשלוף את כל הבתים של האובייקט ולשפוך אותם ל-stream. גם מחלקות הבסיס של האובייקט וכל השדות שבתוכו צריכים להיות Serializable. טיפוסים פרימיטיביים כבר כאלה.Person (עם cast של 12 ל-byte), וקוראים ל-objectOutputStream.writeObject(person). את כל המשתנים הבודדים מהשיעור הקודם כבר לא צריך.Person וקוראים ל-objectInputStream.readObject().הטקסט המלא של הדקות הראשונות בהרצאה «Object Serialization» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שכתבנו בעצמנו פריטי מידע טיפוסים שונים לקובץ בינארי וקראנו אותם וזה היה קצת קשה לביצוע כי היינו צריכים לדעת בדיוק מה כתבנו ובאיזה סדר ובאיזה טיפוס אז אחרי שעשינו את זה בואו נראה איך אנחנו יכולים לעשות משהו הרבה יותר קל ופשוט להגדיר אובייקט ולשפוך את כל האובייקט as
is לקובץ בינארי וכמובן גם לטעון אותו. אז התהליך הזה נקרא סריאליזציה, סריאליזיישן. ומה שאנחנו צריכים לעשות זה קודם כל להגדיר מחלקה משלנו.
אז בואו נגדיר מחלקה ונגיד שאנחנו בונים את פרסון כרגע, ולפרסון יש בדיוק את האלמנטים שכתבנו מקודם, יש לנו בית אייג', יש לנו איזשהו סלארי שזה פלוט סלארי יש לנו סטרינג שזה פול ניים ממש באותו הסדר אפילו אני עושה את זה ויש לנו איזשהו אינטג'ר שזה היה זיפ קוד אנחנו רוצים ללחוץ על אלט אינסרט בכדי לבנות גטרים וסטרים עבור ארבעת החברה
האלה אנחנו רוצים אלט אינסרט עבור בניית קונסטרקטור שמקבל את ארבעת החבר'ה האלה. הקונסטרקטור צריך לשלוח מידע לסטרים, זה יהיה הרבה יותר נכון.
סט סלרי, יש לנו את סט פול ניים ויש לנו את סט זיפ קוד. ואנחנו רוצים גם איזושהי פונקציית two-string, בואו נבנה אותה פה.
ניגש ונעשה איזה טוסטרינג שפשוט תחזיר לנו פחות או יותר את מה שקיים כאן וזה יהיה אייג' בואו נגדיר אותו בצורה כזאת ואנחנו רוצים להחזיר גם סלרי אנחנו רוצים להחזיר את הפול ניים ואנחנו רוצים להחזיר ה-zip code ונסתפק בזה.
בשביל שנוכל לקחת אובייקט פרסון ולזרוק אותו as is לתוך קובץ בינארי בעזרת מנגנון ה-serialization, אנחנו חייבים לממש את serializable ופשוט רק להגדיר פה implement serializable בכדי שהמערכת תדע שהיא יכולה לקחת עכשיו Object Person ופשוט לשלוף ממנו את כל הבתים ולזרוק אותם as is לתוך סטרים ואנחנו כמובן ניתן את ה-Output Object Output Stream בכדי
לבצע את זה. אז כל מה שאנחנו צריכים לעשות זה א', להגדיר Object Person. בואו נגדיר Person שווה New Person וניתן לו את ה-Age שזה ה-12, ניתן לו את ה-Sellary שזה ה-10,650F, ניתן לו את ה-Full Name וניתן לו את ה-Zip Code ונראה שהוא צועק עלינו כי 12 מבחינתו זה אינטג'ר, אנחנו צריכים להגיד לו שהתייחס לזה כבית
ואז אנחנו לא צריכים את כל המשתנים הבודדים האלה ואנחנו לא צריכים לשמור אותם בצורה בודדת, אנחנו פשוט פונים ל-object output stream.write object ונותנים לו את ה-person.
מה שהמחלקה הזאת עושה היא פשוט לוקחת את האובייקט הזה כמו שהוא, שולפת ממנו את כל הבתים איך שהוא מופיע בזיכרון וזורקת אותם לתוך הקובץ. היא פשוט יודעת איזה ערך הולך לאיזה משתנה בכדי שתהיה לה את היכולת להחזיר את זה אחר כך.
אז איך אנחנו קוראים את זה? מה שאנחנו צריכים לעשות בשביל לקרוא את כל הסיפור הזה זה לבנות רפרנס פרסון ולבוא לאובג'קט אינפוט סטרים read object יחזיר לנו את האובייקט הזה ואז אנחנו לא צריכים את כל הבלאגן הזה שזה לא היה דבר רע שעשינו פשוט אם אנחנו רוצים לשלוט על המידע כשאנחנו מכניסים לקובץ או להכניס כל מיני דברים שונים ולאו דווקא
אובייקט אחד אז מה שעשינו זה בסדר. אם אנחנו רוצים להכניס אובייקט אחד ויחיד, כל מה שאנחנו צריכים לעשות זה לגרום לו להיות סריאליזבל לכל מחלקות הבסיס שלו.
אנחנו גם צריכים להגדיר סריאליזבל, ולכל המשתנים שיש בתוכו הם גם צריכים להיות סריאליזבל. כמובן שאלה טיפוסים פרימיטיביים והם אוטומטית סריאליזבל.
אז בואו נבדוק איך כל