package com.phone.shuyinghengxie; import java.io.Serializable; /* 一個類的對象要想序列化成功,必須知足兩個條件: 該類必須實現 java.io.Serializable 對象。 該類的全部屬性必須是可序列化的。若是有一個屬性不是可序列化的, 則該屬性必須註明是短暫的。 若是你想知道一個Java標準類是不是可序列化的,請查看該類的文檔。 檢驗一個類的實例是否能序列化十分簡單, 只須要查看該類有沒有 實現java.io.Serializable接口。 */ 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); } }
/* 序列化對象 ObjectOutputStream 類用來序列化一個對象,以下的SerializeDemo例子實例化了一個Employee對象,並將該對象序列化到一個文件中。 該程序執行後,就建立了一個名爲employee.ser文件。該程序沒有任何輸出,可是你能夠經過代碼研讀來理解程序的做用。 注意: 當序列化一個對象到文件時, 按照Java的標準約定是給文件一個.ser擴展名。 */ 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程序實例了反序列化,/tmp/employee.ser存儲了Employee對象。 */ 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); } }