Java序列化是一種將Java對象轉換為字節流的技術,可以將轉換后的字節流保存到文件或網絡傳輸。反序列化則是將字節流轉換回Java對象的過程。
Java序列化的主要用途是方便數據的持久化和網絡傳輸。例如,一個Java對象可以被序列化后保存到本地文件中,在需要時再進行反序列化恢復原來的狀態。另外,在分布式系統中,Java對象可以被序列化后通過網絡傳輸,在不同的進程或機器上進行通信。
Java序列化的實現依賴于ObjectOutputStream和ObjectInputStream類,即對象輸出流和對象輸入流。以下是一個簡單的Java序列化示例:
public static void main(String[] args) { // 創建一個Person對象 Person person = new Person("張三", 25); // 將Person對象序列化保存到本地文件中 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.obj"))) { oos.writeObject(person); } catch (IOException e) { e.printStackTrace(); } // 從本地文件中反序列化讀取Person對象 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.obj"))) { Person newPerson = (Person) ois.readObject(); System.out.println(newPerson.getName() + "," + newPerson.getAge()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }
在上面的示例中,Person類需要實現Serializable接口,才能被序列化和反序列化。在序列化時,使用ObjectOutputStream將Person對象寫入文件;在反序列化時,使用ObjectInputStream從文件中讀取Person對象。
Java序列化還有一些局限性,例如無法序列化靜態變量和transient修飾的變量等。如果需要更靈活的序列化方式,可以考慮使用JSON、XML等格式進行數據轉換。