Java序列化是將Java對象轉化為字節流的過程,使其能夠在網絡上傳輸或者保存在本地文件系統上。反序列化就是將字節流轉化為Java對象。
public class Person implements java.io.Serializable { public String name; public int age; }
在上面的代碼中,Person對象實現了Serializable接口,這樣就可以對其進行序列化和反序列化。
// 序列化 Person person = new Person(); person.name = "Alice"; person.age = 20; try { FileOutputStream fileOut =new FileOutputStream("/tmp/person.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(person); out.close(); fileOut.close(); } catch (IOException e) { e.printStackTrace(); } // 反序列化 try { FileInputStream fileIn = new FileInputStream("/tmp/person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); Person person = (Person) in.readObject(); in.close(); fileIn.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }
在對Java對象進行序列化和反序列化的過程中,需要注意以下幾點:
- 被序列化的對象必須實現Serializable接口。
- 序列化和反序列化的過程中,被序列化對象的類的所有成員變量也必須是可序列化(即基本類型或實現Serializable接口)的。
- 在反序列化過程中,類的默認構造方法會被調用,因此需要確保被序列化對象的類有公共的默認構造方法。