Java中的對象序列化和反序列化是一種將Java對象轉換為字節(jié)序列并將其存儲在文件或通過網絡傳輸的過程,并且可以在需要時將其還原成原始的對象的方法。
在Java中,對象序列化和反序列化是通過Java.io.Serializable接口來實現的。 Serializable接口是一個標記接口,沒有方法。 任何將實現Serializable接口的類的實例都可以通過對象序列化和反序列化進行存儲和恢復。
public class Employee implements 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); } }
在上述例子中,Employee類實現了Serializable接口。這意味著可以使用Java序列化API將該類的實例轉換為字節(jié)序列。
下面是一個將Java對象序列化并寫入文件的示例。
try { FileOutputStream fileOut = new FileOutputStream("employee.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.println("Serialized data is saved in employee.ser"); } catch (IOException i) { i.printStackTrace(); }
在上述示例中,ObjectOutputStream類用于將Employee對象e序列化為字節(jié)。然后,對象將被寫入名為employee.ser的文件。在此過程中,所有實現Serializable接口的對象狀態(tài)也將被寫入文件。
下面是一個從文件讀取Java對象并將其反序列化的示例。
try { FileInputStream fileIn = new FileInputStream("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; }
在上述示例中,ObjectInputStream類從名為employee.ser的文件中讀取Employee對象e的字節(jié)數據。隨后,讀取的數據被反序列化為Employee對象。