標籤:object java outputstream
Java預設序列化技術
主要是通過
package com.xingej.ser;public interface ISerializer {// 序列化,將obj序列化成位元組數組public <T> byte[] serialize(T obj);// 還原序列化,將位元組數組,還原序列化為Tpublic <T> T deserialize(byte[] data, Class<T> clazz);}
實作類別:
package com.xingej.ser.impl;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import com.xingej.ser.ISerializer;public class DefaultJavaSerializer implements ISerializer {public <T> byte[] serialize(T obj) {// 預設建立的是32個位元組ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = null;try { // 對位元組輸出資料流進行封裝oos = new ObjectOutputStream(bos);// 通過writeObject,將obj對象進行序列化到了bos裡oos.writeObject(obj);} catch (IOException e) {e.printStackTrace();}return bos.toByteArray();}@SuppressWarnings("unchecked")public <T> T deserialize(byte[] data, Class<T> clazz) {// 將位元組數組,轉換成輸入資料流ByteArrayInputStream bis = new ByteArrayInputStream(data);ObjectInputStream ois = null;Object object = null;try {// 將位元組輸入資料流 轉換成 對象輸入資料流ois = new ObjectInputStream(bis);// 這樣的話,就可以通過ObjectInputStream的readObject方法// 直接讀取對象了object = ois.readObject();} catch (Exception e) {e.printStackTrace();}return (T) object;}}
進行測試
package com.xingej.ser.client;import com.xingej.ser.ISerializer;import com.xingej.ser.impl.DefaultJavaSerializer;/** * 對java預設序列化進行測試 * */public class Driver {public static void main(String[] args) {String name = "spark";ISerializer serializer = new DefaultJavaSerializer();// 序列化byte[] nameSer = serializer.serialize(name);// 反序列Object object = serializer.deserialize(nameSer, String.class);System.out.println("---序列化--->:\t" + object);}}
本文出自 “XEJ分布式工作室” 部落格,請務必保留此出處http://xingej.blog.51cto.com/7912529/1959729
序列化之Java預設序列化技術(ObjectOutputStream與ObjectInputStream)