Java序列化和反序列化是Java編程中重要的概念。序列化是將Java對象轉化為字節流的過程,反序列化則是將字節流轉換為Java對象的過程。
在Java編程中,我們經常需要將對象存儲到文件中、通過網絡傳輸對象或者將對象存儲到數據庫中。序列化和反序列化可以方便地完成這些操作。
Java的序列化和反序列化使用ObjectOutputStream和ObjectInputStream類。ObjectOutputStream可以將一個Java對象序列化為一個字節流,而ObjectInputStream則可以將這個字節流反序列化為原始的Java對象。
//序列化一個對象到文件中 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) { MyObject obj = new MyObject(); oos.writeObject(obj); } //從文件中反序列化一個對象 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) { MyObject obj = (MyObject) ois.readObject(); }
值得注意的是,需要被序列化的Java對象必須實現Serializable接口,這個接口沒有任何方法,只是一個標記接口。
public class MyObject implements Serializable { private int id; private String name; }
當一個對象被序列化時,其成員變量也會被序列化。但是,有時我們需要限制某些成員變量不被序列化。可以使用transient關鍵字來標記不需要序列化的成員變量。
public class MyObject implements Serializable { private int id; private transient String name; }
Java序列化和反序列化是Java編程中很重要的概念,能夠方便地將Java對象存儲到文件、傳輸到網絡等。但是需要注意被序列化的Java對象必須實現Serializable接口,且有時需要限制某些成員變量不被序列化。