序列化之Java默認序列化技術(ObjectOutputStream與ObjectInputStream)
阿新 • • 發佈:2017-08-27
object java outputstream
Java默認序列化技術
主要是通過
對象輸出流java.io.ObjectOutputStream
對象輸入流java.io.ObjectInputStream
來實現的
package com.xingej.ser; public interface ISerializer { // 序列化,將obj序列化成字節數組 public <T> byte[] serialize(T obj); // 反序列化,將字節數組,反序列化為T public <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)