Java基礎(五十六)-物件序列化
阿新 • • 發佈:2018-12-21
物件例項化
所謂的物件序列化指的是將記憶體中儲存的物件以二進位制資料流的形式進行處理,可以實現物件的儲存或者是網路傳輸。
、
@SuppressWarnings("serial") class Person implements Serializable { // Person類可以被序列化 private String name ; private int age ; public Person(String name,int age) { this.name = name ; this.age = age ; } // setter、getter略 @Override public String toString() { return "姓名:" + this.name + "、年齡:" + this.age ; } } //此時的Person類產生的每一個物件都可以實現二進位制的資料傳輸,屬於可以被例項化的程式類。
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class JavaAPIDemo { private static final File SAVE_FILE = new File("D:" + File.separator + "mldn.person") ; public static void main(String[] args) throws Exception { // saveObject(new Person("小噴嚏",78)) ; System.out.println(loadObject()); } public static void saveObject(Object obj) throws Exception { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(SAVE_FILE)) ; oos.writeObject(obj); // 序列化 oos.close(); } public static Object loadObject() throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(SAVE_FILE)) ; Object obj = ois.readObject() ; // 反序列化 ois.close(); return obj ; } } @SuppressWarnings("serial") class Person implements Serializable { // Person類可以被序列化 private String name ; private int age ; public Person(String name,int age) { this.name = name ; this.age = age ; } // setter、getter略 @Override public String toString() { return "姓名:" + this.name + "、年齡:" + this.age ; } }
在Java中的物件序列化於反序列化必須使用內部提供的物件操作流,因為這裡涉及到二進位制資料的格式,所以不能夠自定義處理,另外如果要想實現一組物件的序列化,則使用物件陣列完成。
假設類之中有一些是需要計算儲存的屬性內容往往是不需要被序列化,這個時候可以使用transient。