
TextFileManager הופך ל-BinaryFileManager (Shift F6), וסיומת הקובץ ל-.bin. אין צורך בירידות שורה.FileWriter משתמשים ב-FileOutputStream ו-ObjectOutputStream ומבצעים writeObject(products) על הרשימה כולה. אין יותר פורמט שממציאים בעצמנו. אחר כך סוגרים את שני הזרמים.FileInputStream ו-ObjectInputStream, ומבצעים readObject() עם cast ל-ArrayList<Product>. סוגרים את שני הזרמים.products ואז מחזירים אותו, ולא עושים return ישירות. כך אפשר לשים breakpoint ולראות את הערך בזמן debugging, לתעד כל שורה בנפרד, והשם של המשתנה מבהיר מה מוחזר.ArrayList בפורמט Serialization, כולל המחרוזות כמו green apple ו-round peach.הטקסט המלא של הדקות הראשונות בהרצאה «Save Collection to Binary File» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם שמרנו את רשימת המוצרים לקובץ טקסטואלי בפורמט שאנחנו המצאנו. ויש לזה כמובן יתרון שהקובץ הזה נחשב Human Readable, זאת אומרת בן אדם יכול לשלוף את הקובץ ולקרוא אותו.
אם אנחנו לא רוצים שהוא יהיה Human Readable או שלא יהיה Readable בצורה פשוטה, אנחנו יכולים לשמור אותו לקובץ בינארי. הוא יהיה כך יותר מצומצם וקצת יותר קשה לקריאה כמובן.
אם הקבצים הם לא כל כך גדולים אז זה לא כזה משנה, אם הקבצים הם יותר גדולים אז זה כבר יותר משמעותי. בסרטון הזה אנחנו הולכים לראות איך אנחנו יכולים לעשות בדיוק את אותו הדבר, לבצע את השמירה אבל לקובץ בינארי.
אז קודם כל המחלקה הזאת שבנינו כאן, טקסט פייל מנאג'ר, בואו על ידי שיפט F6 נשנה לה את השם ל-Binari File Manager והוא משנה את זה בכל מקום.
ופשוט נשנה את מה שצריך בשביל לבצע את השמירה לקובץ בינארי. דבר ראשון, אין לנו כאן אנטרים, זה לא קובץ טקסטואלי ואין לנו שורות, אז אנחנו מעיפים את ה-enter.
הדבר הבא, זה הסיומת של הקובץ צריכה להיות בין, קצת יותר אלגנטי. פונקציית save מקבלת מערך, ואנחנו לא רוצים את ה-file writer, אלא אנחנו רוצים את file output stream.
בואו נגדיר אותו כ-Null, ואנחנו רוצים את Object Output Stream שעבדנו איתם בסרטונים הקודמים. Object Output Stream שווה Null ואנחנו את זה ניפטר ממנו.
רוצים לפתוח אובייקטים File Output Stream שווה New File Output Stream Get Path and File Name והנה אנחנו מצביעים על הקובץ. לאחר מכן אנחנו רוצים את ה-object output stream והוא מקבל את ה-file output stream וכל מה שאנחנו צריכים לעשות זה object output stream נקודה write object ופשוט לשלוח את כל המוצרים לקובץ.
אפשר להיפטר מכל הבלאגן הזה שאנחנו היינו צריכים להמציא איזה שהוא פורמט. כמובן שאנחנו יכולים גם כאן להמציא פורמט ולשמור את הערכים בעצמנו, אבל הרבה יותר פשוט להשתמש במנגנון ה-Serialization ולזרוק את כל המידע as is לקובץ.
בואו ניפטר רגע מה-FileWriter ונסגור את ה-File Output Stream ואת ה-Object Output Stream, והנה יש לנו כאן את השמירה. איך אנחנו מבצעים טעינה?
לצורך הטעינה בואו נבנה פייל input stream, נכניס לתוכו null, נבנה object input stream, נכניס לתוכו null, ניפטר משני החבר'ה האלה.
יש לנו כאן את הבדיקה הזאת, האמת בואו נעשה את הבדיקה כאן כדבר ראשון, אז פשוט נחזיר New ArrayList ריק. אם הקובץ קיים, אנחנו רוצים לבנות אובייקטים מסוג FileInputStream שווה New FileInputStream, לתת לו את הנתיב לקובץ Object InputStream, גם כן אובייקט חדש שמקבל את ה-FileInputStream,
וכל מה שאנחנו רוצים לעשות זה to return את Object Input Stream Read Object בצורה כזאת. ורק נבצע איזשהו casting ל-araylist של פרודקט.
ניפטר מכל הקוד הקודם שתפקידו היה לרוץ על הקובץ ולקרוא את כל המידע בצורה כזאת. באמת בואו נעשה את זה קצת יותר מקצועי ניקח פרודקטס ואז נחזיר פרודקטס יש לזה כמה יתרונות יתרון ראשון זה שאפשר לשים פה ברייק פוינט או כאן ברייק פוינט ואז לראות
תוך כדי הדיבאגינג מה יש לנו אם היינו עושים ריטרן ישר קצת היה קשה לראות את זה יתרון שני שאפשר לתעד בנפרד את כל שורה ויתרון שלישי ושרואים מה השם של המשתנה אז יודעים שזה פרודקט אם אני פשוט מסתכל על השורה הזאת קשה לי לדעת מה בדיוק החזרתי מהקובץ.
אוקיי בואו ניקח את Object input stream נסגור אותו את File input stream נסגור אותה ואפשר