Java序列化是將Java對(duì)象轉(zhuǎn)化為字節(jié)流的過程,使其能夠在網(wǎng)絡(luò)上傳輸或者保存在本地文件系統(tǒng)上。反序列化就是將字節(jié)流轉(zhuǎn)化為Java對(duì)象。
public class Person implements java.io.Serializable { public String name; public int age; }
在上面的代碼中,Person對(duì)象實(shí)現(xiàn)了Serializable接口,這樣就可以對(duì)其進(jìn)行序列化和反序列化。
// 序列化 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(); }
在對(duì)Java對(duì)象進(jìn)行序列化和反序列化的過程中,需要注意以下幾點(diǎn):
- 被序列化的對(duì)象必須實(shí)現(xiàn)Serializable接口。
- 序列化和反序列化的過程中,被序列化對(duì)象的類的所有成員變量也必須是可序列化(即基本類型或?qū)崿F(xiàn)Serializable接口)的。
- 在反序列化過程中,類的默認(rèn)構(gòu)造方法會(huì)被調(diào)用,因此需要確保被序列化對(duì)象的類有公共的默認(rèn)構(gòu)造方法。