天天看點

Java 序列化對象為字元串 然後反序列化為對象3. 序列化與反序列化方法封裝

1. 概述

對象的序列化與反序列化其實就是将對象的狀态儲存下來,一般是儲存到檔案中,但是其實更常用的是将對象的序列化為字元串儲存到資料庫中,然後在需要讀取對象情況的時候反序列化為對象。

2. Serializable接口

可以實行序列化的類需要實作Serializable接口,此處需要注意的是如果某個屬性不需要被序列化,可以添加transient關鍵字,這個用的較少此處也不示範了。

package org.maoge.io;
import java.io.Serializable;
//Student類用于示範對象的序列化
public class Student implements Serializable{//Student類通過實作Serializable接口擁有了序列化的能力
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
      

3. 序列化與反序列化方法封裝

一般封裝為靜态方法,需要的時候拿過來用就行,以下是示例:

package org.maoge.io;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializeDemo {
    //測試入口
    public static void main(String[] args) throws Exception{
        Student student=new Student();
        student.setId("1");
        student.setName("王老三");
        String serialStr=serializeToString(student);
        System.out.println(serialStr);
        Student deserialStudent=(Student) deserializeToObject(serialStr);
        System.out.println(deserialStudent.getName());//輸出王老三
    }
    //序列化
    public static String serializeToString(Object obj) throws Exception{
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();  
        ObjectOutputStream objOut = new ObjectOutputStream(byteOut);  
        objOut.writeObject(obj);  
        String str = byteOut.toString("ISO-8859-1");//此處隻能是ISO-8859-1,但是不會影響中文使用
        return str;
    }
    //反序列化
    public static Object deserializeToObject(String str) throws Exception{
         ByteArrayInputStream byteIn = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));  
         ObjectInputStream objIn = new ObjectInputStream(byteIn);  
         Object obj =objIn.readObject();  
         return obj;  
    }
}