Serializable 序列化為字符串 base64


工具類

Base64.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

@SuppressWarnings("restriction")
public class Base64 {
    /**
     * str 編碼為base64
     * 
     * @param String s
     * @return String base64
     * */
    public static String getBase64(String s) {
        if (s == null)
            return null;
        return (new sun.misc.BASE64Encoder()).encode(s.getBytes());
    }

    /**
     * byte[] 編碼為base64
     * 
     * @param byte[] ba
     * @return String base64
     * */
    public static String getBase64(byte[] ba) {
        if (ba == null)
            return null;
        return (new sun.misc.BASE64Encoder()).encode(ba);
    }

    /**
     * base64 解碼為 byte[]
     * 
     * @param String base64
     * @return byte[]
     * @throws IOException
     * */
    public static byte[] base64ToByteArray(String base64) throws IOException {
        if (base64 == null)
            return null;
        return (new sun.misc.BASE64Decoder()).decodeBuffer(base64);
    }
    
    /**
     * 將base64 字符串反序列化為指定的類
     * 
     * @param base64 序列化后用Base64編碼的字符串
     * @param serializedClass 序列化對象的class
     * 
     * @return typed object, can be null.
     * */
    @SuppressWarnings("unchecked")
    public static <T> T deFromBase64(String base64, Class<T> serializedClass) {
        Object o = null;
        byte[] ba = null;
        ByteArrayInputStream bai = null;
        ObjectInputStream oi = null;
        try {
            ba = Base64.base64ToByteArray(base64);
            bai = new ByteArrayInputStream(ba);
            oi = new ObjectInputStream(bai);
            o = oi.readObject();
        } catch (IOException e) {
            System.out.println("反序列化失敗!");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("類未找到!");
            e.printStackTrace();
        } finally {
            try {
                if (oi != null) {
                    oi.close();
                }
                if (bai != null) {
                    bai.close();
                }
            } catch (IOException e) {
                System.out.println("關閉流異常!");
                e.printStackTrace();
            }
        }
        return o == null ? null : (T) o;
    }

    /**
     * 將對象序列化為Base64 字符串
     * 
     * @param obj 實現了可序列化接口的對象
     * @return String 對象序列化為字符串后編碼為Base64
     * */
    public static String se2base64(Serializable obj) {
        byte[] ba = null;
        ByteArrayOutputStream baos = null;
        ObjectOutputStream oos = null;
        try {
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(obj);
            ba = baos.toByteArray();
        } catch (IOException e) {
            System.out.println("序列化失敗!");
        } finally {
            try {
                if (baos != null) {
                    baos.close();
                }
                if (oos != null) {
                    oos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return ba == null ? null : Base64.getBase64(ba);
    }
}

 

測試:

import java.io.Serializable;

public class Test {

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("Xiaoming");
        person.setAge(11);
        String s = Base64.se2base64(person);
        Person xiaoming = Base64.deFromBase64(s, Person.class);
        System.out.println(xiaoming.toString());
    }

}

class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

運行結果:

Person [name=Xiaoming, age=11]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM