با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. جاوا یک مکانیسم را ایجاد می کند که به نام serialization (سریال سازی) شناخته می شود، جایی که یک شی را می توان به عنوان دنباله ای از بایت هایی که شامل داده های شیء و همچنین اطلاعات مربوط به نوع شیء و نوع داده ذخیره شده در شیء است، را نشان داد. یک شیء سریالی در قالب یک فایل نوشته شده است، که می توان آن را از فایل خوانده و یا آن را نادیده گرفت. با این قابلیت یک شی را می توان بر روی یک پلتفرم سریال کرد و یا در یک پلتفرم کاملا متفاوت قرار داد. برای آشنایی بیشتر با Serialization در جاوا در ادامه ی مباحث این بخش با ما همراه باشید.
در ادامه ی مبحث Serialization در جاوا ما شما را با کلاس های Serialization و سریال سازی شیء آشنا می کنیم.
کلاس های ObjectInputStream و ObjectOutputStream از نوع stream سطح بالا هستند.
کلاس های فوق الذکر شامل متد های سریال سازی و deserialization یک شی است.
کلاس ObjectOutputStream شامل بسیاری از متدهای نوشتن برای نوشتن انواع داده های مختلف است:
1 | public final void writeObject(Object x) throws IOException |
متد فوق یک Object را سریال کرده و آن را به stream خروجی ارسال می کند.
به طور مشابه، کلاس ObjectInputStream شامل متد زیر برای deserialization یک شی است:
1 | public final Object readObject() throws IOException, ClassNotFoundException |
این متد Object بعدی را خارج از stream بازیابی کرده و آن را غیرفعال می کند.
مقدار بازگشتی Object است، بنابراین شما باید آن را به نوع داده های مناسب مورد بازبینی قرار دهید.
در ادامه برای نمونه کلاس Employee را Serialization می کنیم:
1 2 3 4 5 6 7 8 9 10 | public class Employee implements java.io.Serializable { public String name; public String address; public transient int SSN; public int number; public void mailCheck() { System.out.println("Mailing a check to " + name + " " + address); } } |
توجه داشته باشید که برای اعمال Serialization موفق روی یک کلاس باید موارد زیر را رعایت کنید:
اگر می خواهید بدانید که آیا یک کلاس استاندارد Java قابل سریال سازی است یا خیر، مستندات مربوط به آن کلاس را بررسی کنید.
تست ساده: اگر کلاس implements java.io.Serializable موجود بود قابل سریال سازی است در غیر این صورت نیست.
کلاس ObjectOutputStream برای سریال سازی یک شی مورد استفاده قرار می گیرد.
برنامه SerializeDemo زیر یک شیء Employee را ایجاد می کند و آن را به یک پرونده سریال می کند.
هنگامی که برنامه اجرا می شود، یک فایل به نام employee.ser ایجاد می شود.
برنامه ی فوق خروجی تولید نمی کند، بلکه کد را مرور کرده و سعی می کند که برنامه را انجام دهد.
هنگامی که یک شیء را به یک پرونده انتساب می دهید استاندارد جاوا این است که به فایل فرمت ser بدهید.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import java.io.*; public class SerializeDemo { public static void main(String [] args) { Employee e = new Employee(); e.name = "Reyan Ali"; e.address = "Phokka Kuan, Ambehta Peer"; e.SSN = 11122333; e.number = 101; try { FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.printf("Serialized data is saved in /tmp/employee.ser"); } catch (IOException i) { i.printStackTrace(); } } } |
برنامه DeserializeDemo زیر Deserializes شیء Employee ایجاد شده در برنامه SerializeDemo است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import java.io.*; public class DeserializeDemo { public static void main(String [] args) { Employee e = null; try { FileInputStream fileIn = new FileInputStream("/tmp/employee.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); e = (Employee) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Employee class not found"); c.printStackTrace(); return; } System.out.println("Deserialized Employee..."); System.out.println("Name: " + e.name); System.out.println("Address: " + e.address); System.out.println("SSN: " + e.SSN); System.out.println("Number: " + e.number); } } |
نتیجه ی اجرای کد فوق خروجی زیر خواهد بود:
1 2 3 4 5 | Deserialized Employee... Name: Reyan Ali Address:Phokka Kuan, Ambehta Peer SSN: 0 Number:101 |
در اینجا نکات مهمی را می توان ذکر کرد:
با استفاده از قابلیت Serialization در جاوا می توان داده ها و اطلاعات مربوط به یک شیء را بصورت دنباله ای از بایت ها و اعداد در جاوا نمایش داد و می توان یک آبجکت را در یک پلتفرم متفاوت قرار داد، در بخش بعدی به بررسی مباحث شبکه سازی در جاوا خواهیم پرداخت.