上一節中我們通過在類中實作Serializable聲明該類能夠序列化,本節将帶領讀者借助ObjectOutputStream類和ObjectInputStream類實作對象的序列化和反序列化。
【本節目标】
通過閱讀本節内容,你将了解到ObjectOutputStream類和ObjectInputStream類的定義、相關方法等内容,并結合執行個體實作對類對象的序列化輸出和反序列化讀取的操作,同時了解其使用方面的部分限制。
序列化與反序列化處理
有了序列化的支援類後,如果想要實作序列化和反序列化操作則可以利用以下兩個類完成。
序列化:ObjectOutputStream:
類定義:public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants
構造方法:
public ObjectOutputStream(OutputStream out) throws IOException
操作方法:
public final void writeObject(Object obj) throws IOException
反序列化:ObjectInputStream:
類定義:public class ObjectInputStream extends InputStream implements ObjectInput,ObjectStreamConstants
構造方法:
public ObjectInputStream(InputStream in) throws IOException
操作方法:
public final Object readObject() throws IOException, ClassNotFoundException
範例:實作序列化與反序列化
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
@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;
}
@Override
public String toString() {
return "姓名:" + this.name + "、年齡:" + this.age;
}
}
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;
}
}
在Java中的對象序列化與反序列化必須使用内部提供的對象操作流,因為這裡面牽扯到了二進制資料的格式,是以不能自定義處理,另外如果要想實作一組對象的序列化,則可以使用對象數組完成。
在很多的實際項目開發過程之中,開發者很少能見到ObjectOutputStream、ObjectInputStream類的直接操作,因為會有一些容器幫助開發者自動實作。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:transient:将屬性脫離序列化 | 帶你學《Java語言進階特性》之七十一 更多Java面向對象程式設計文章檢視此處