您的位置:首页 > 移动开发 > Objective-C

序列化之Java默认序列化技术(ObjectOutputStream与ObjectInputStream)

2017-08-27 16:54 573 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java OutputStream Object
相关文章推荐