java序列化-Serializable

代碼: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

相關文章
相關標籤/搜索