Java序列化基礎案例
阿新 • • 發佈:2018-12-30
Java物件序列化和反序列化:程序之間通訊將JAVA物件和目標二進位制檔案進行轉換,用於網路通訊之間的資料傳輸
序列化:JAVA物件轉換為二進位制位元組序列的過程
反序列化:二進位制位元組序列解析為JAVA物件的過程
物件可序列化的條件:實現Serializable介面序列化
應用:java框架中定義的物件80%都是序列化物件,作用為了更方便進行資料傳輸
package com.zhiwei.basic;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectSerializable {
public static void main(String[] args) throws Exception{
//String類實現了Serializable介面
String str=new String("abcsdcsdcdscsdcsdcssd");
System.out.println("序列化物件String:"+str);
FileOutputStream fos=new FileOutputStream("d:/temp.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(str);
FileInputStream fis=new FileInputStream("d:/temp.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
Object strCopy=ois.readObject();
System.out.println("反序列化物件String:" +strCopy);
System.out.println("\n");
//注意反序列化之後的物件和原物件的物件16進製表示格式不一樣,類似拷貝的原理
AAAAAA aa=new AAAAAA("AAAA","BBBBB");
System.out.println("序列化物件:"+aa);
System.out.println("序列化前:"+aa.getAa());
fos=new FileOutputStream("d:/temp.txt");
oos=new ObjectOutputStream(fos);
oos.writeObject(aa);
fis=new FileInputStream("d:/temp.txt");
ois=new ObjectInputStream(fis);
AAAAAA bb=(AAAAAA) ois.readObject();
System.out.println("反序列化物件:"+bb);
System.out.println("序列化後:"+bb.getAa());
ois.close();
oos.close();
}
}
class AAAAAA implements Serializable{ //簡單可例項化的POJO物件
//序列號:作用校驗序列化原物件和反序列化之後的物件是否一致:JVM檢測
private static final long serialVersionUID = 1L;
private String aa;
private String bb;
public String getAa() {
return aa;
}
public void setAa(String aa) {
this.aa = aa;
}
public String getBb() {
return bb;
}
public void setBb(String bb) {
this.bb = bb;
}
public AAAAAA(String aa, String bb) {
super();
this.aa = aa;
this.bb = bb;
}
}
結果顯示:
序列化物件String:abcsdcsdcdscsdcsdcssd
反序列化物件String:abcsdcsdcdscsdcsdcssd
序列化物件:[email protected]
序列化前:AAAA
反序列化物件:[email protected]
序列化後:AAAA
結論:
序列化只是對物件例項的拷貝,使得物件例項可以以檔案或者其他的形式持久化儲存,如果不需要檔案進行持久化儲存介質,可以使用ByteArrayInputStream/ByteArrayOutputStream將序列化資料存放在快取位元組資料中,快取充當臨時儲存介質
主要程式碼:
String str=new String("abcsdcsdcdscsdcsdcssd");
ByteArrayOutputStream bos=new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(bos);
oos.writeObject(str);
//bos.toByteArray():位元組快取陣列快取的資料
ByteArrayInputStream bis=
new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois=new ObjectInputStream(bis);
Object object=ois.readObject();
System.out.println(object);
//包裹流關閉其基礎流也會一起關閉
ois.close();
oos.close();