什麼是 java 序列化?什麼情況下需要序列化?

什麼是 java 序列化?什麼情況下需要序列化?

序列化:將 Java 對象轉換成字節流的過程。

反序列化:將字節流轉換成 Java 對象的過程。

當 Java 對象需要在網絡上傳輸 或者 持久化存儲到文件中時,就需要對 Java 對象進行序列化處理。

序列化的實現:類實現 Serializable 接口,這個接口沒有需要實現的方法。實現 Serializable 接口是爲了告訴 jvm 這個類的對象可以被序列化。

注意事項:

  • 某個類可以被序列化,則其子類也可以被序列化
  • 聲明爲 static 和 transient 的成員變量,不能被序列化。static 成員變量是描述類級別的屬性,transient 表示臨時數據
  • 反序列化讀取序列化對象的順序要保持一致

 

具體使用

package constxiong.interview;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * 測試序列化,反序列化
 * @author ConstXiong
 * @date 2019-06-17 09:31:22
 */
public class TestSerializable implements Serializable {

	private static final long serialVersionUID = 5887391604554532906L;
	
	private int id;
	
	private String name;

	public TestSerializable(int id, String name) {
		this.id = id;
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "TestSerializable [id=" + id + ", name=" + name + "]";
	}

	@SuppressWarnings("resource")
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		//序列化
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("TestSerializable.obj"));
		oos.writeObject("測試序列化");
		oos.writeObject(618);
		TestSerializable test = new TestSerializable(1, "ConstXiong");
		oos.writeObject(test);
		
		//反序列化
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("TestSerializable.obj"));
		System.out.println((String)ois.readObject());
		System.out.println((Integer)ois.readObject());
		System.out.println((TestSerializable)ois.readObject());
	}

}

打印結果:

測試序列化
618
TestSerializable [id=1, name=ConstXiong]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章