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); } }
时间: 2024-10-02 06:26:15