码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-08-27 22:26:26      阅读:332      评论:0      收藏:0      [点我收藏+]

标签: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)

标签:object   java   outputstream   

原文地址:http://xingej.blog.51cto.com/7912529/1959729

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!