序列化概念:java提供了一種對象序列化的機制,該機制中,一個對象能夠被表示爲一個字節序列,該字節序列包括該對象的數據,有關對象的類型的信息和存儲在對象中數據的類型。java
反序列化概念:把字節恢復爲對象的過程叫反序列化。spa
類ObjectInputStream和ObjectOutputStream包含了序列化和反序列化對象的方法。code
一個類要想序列化成功,必須知足兩個條件:對象
該類必須實現java.io.SeriaAlizable;blog
該類的全部屬性必須是可序列化的,若是一個屬性不是可序列化的,則該屬性必須註明是短暫的。接口
示例:it
SerializeDemo.java文件:用ObjectOnputStream實現序列化io
import java.io.*; public class SerializerDemo { public static void main(String [] args) { Employee e = new Employee(); e.name = "Ali"; e.address = "yi"; e.SSN = 123456; e.number = 11545; try { //文件輸出流(FileOutputStream):FileOutputStream用於寫入原始字節流,如圖像數據。當序列化一個對象到文件時, 按照 Java 的標準約定是給文件一個 .ser 擴展名 FileOutputStream fileOut = new FileOutputStream("C:/Users/July/Desktop/test/1.ser"); //ObjectOutputStream 類用來序列化一個對象 ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.printf("成功序列化"); }catch(IOException i) { i.printStackTrace(); } } }
employee.java文件:class
import java.io.Serializable; //建立接口 class Employee implements Serializable{ public String name; public String address; public transient int SSN; public int number; }
反序列化:用ObjectInputStream實現反序列化test
import java.io.*; public class DeserializeDemo { public static void main(String[] args) throws ClassNotFoundException { Employee e = null; try { FileInputStream fileIn = new FileInputStream("C:/Users/July/Desktop/test/1.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); e = (Employee) in.readObject(); in.close(); fileIn.close(); }catch(IOException i) { i.printStackTrace(); return; }catch(ClassNotFoundException c) { System.out.println("Emplyoee類沒有發現"); c.printStackTrace(); } System.out.println("執行。。。。。"); System .out .println("Name:" + e.name ); System .out .println("Address:" + e.address ); System .out .println("SSN:" + e.SSN ); System .out .println("Number:" + e.number ); } }