代碼:java
package code; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class SerializableTest implements Serializable { private static final long serialVersionUID = 1L; private String name = "who"; private int age = 24; public static void main(String[] args) { write(); // read(); } /** * 將對象序列化 * * @author LiuJie * @time 2016年7月23日 下午11:41:09 */ public static void write() { try { // ObjectOutputStream能把Object輸出成Byte流 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\Users\\傑\\Desktop\\out.txt"));// 輸出流保存的文件名爲 SerializableTest obj = new SerializableTest(); obj.age = 11; oos.writeObject(obj); oos.flush(); // 緩衝流 oos.close(); // 關閉流 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 反序列化 * * @author LiuJie * @time 2016年7月23日 下午11:44:37 */ public static void read() { ObjectInputStream oin = null; try { oin = new ObjectInputStream(new FileInputStream("D:\\Users\\傑\\Desktop\\out.txt")); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } SerializableTest obj = null; try { obj = (SerializableTest) oin.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("name=" + obj.name); System.out.println("age=" + obj.age); } }
序列化後的文件:code
讀取文件反序列化:對象
name=promonkey
age=22接口
靜態變量不會序列化,也就是說吧name或age變成static,反序列化後輸出的值仍是當前類的靜態變量值。it
transient關鍵字修飾的變量也不能被序列化,這個關鍵字就是爲了讓序列化時忽略一些不但願序列化的值。io
父類實現序列化,子類自動實現序列化,不須要顯式實現Serializable接口;class
序列化是深複製,變量對象的值也會序列化。import