序列化與反序列化處理
有了序列化的支持類後,若是想要實現序列化和反序列化操做則能夠利用如下兩個類完成。
序列化:ObjectOutputStream:java
類定義: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
範例:實現序列化與反序列化ide
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中的對象序列化與反序列化必須使用內部提供的對象操做流,由於這裏面牽扯到了二進制數據的格式,因此不能自定義處理,另外若是要想實現一組對象的序列化,則能夠使用對象數組完成。this
在不少的實際項目開發過程之中,開發者不多能見到ObjectOutputStream、ObjectInputStream類的直接操做,由於會有一些容器幫助開發者自動實現。spa