1. 程式人生 > >Java序列化基礎案例

Java序列化基礎案例

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();