Java中的序列化和反序列化機制是很重要的,因為在很多情況下,需要將對象存儲到磁盤或者網絡中,并且在需要的時候將其還原。Java中的序列化機制可以將一個對象轉換成一個字節序列,這個字節序列可以被存儲到磁盤或者網絡中,而反序列化機制可以將這個字節序列重新轉換成一個對象。
// 序列化代碼 public class SerializeDemo { public static void main(String[] args) { try { // 創建一個對象輸出流 FileOutputStream fileOut = new FileOutputStream("employee.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); // 創建一個Employee對象 Employee e = new Employee(); e.name = "Alex Smith"; e.address = "123 Main Street"; e.SSN = 111223333; e.number = 101; // 將對象序列化 out.writeObject(e); // 關閉流 out.close(); fileOut.close(); System.out.println("Serialized data is saved in employee.ser"); } catch (IOException i) { i.printStackTrace(); } } }
上面的代碼演示了如何將一個Employee對象序列化并且將其存儲到磁盤中。
// 反序列化代碼 public class DeserializeDemo { public static void main(String[] args) { Employee e = null; 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) { 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); } }
上面的代碼演示了如何從磁盤中讀取一個Employee對象并且將其反序列化成一個Java對象。
需要注意的是,Java中的序列化和反序列化機制需要保證序列化和反序列化的版本號一致,否則可能會出現不兼容的情況。