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

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

序列化之Java默认序列化技术(ObjectOutputStream与ObjectInputStream)的相关文章

疯狂Java学习笔记(84)----------关于 Java 对象序列化您不知道的 5 件事

数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数程序员对于 Java 平台都是浅尝则止,只学习了足以完成手头上任务的知识而已.在本 系列 中,Ted Neward 深入挖掘 Java 平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程挑战. 大约一年前,一个负责管理应用程序所有用户设置的开发人员,决定将用户设置存储在一个 Hashta

Java对象序列化和serialVersionUID [转载]

1.序列化: java代码 序列化可以将一个java对象以二进制流的方式在网络中传输并且可以被持久化到数据库.文件系统中,反序列化则是可以把之前持久化在数据库或文件系统中的二进制数据以流的方式读取出来重新构造成一个和之前相同内容的java对象. 2.序列化的作用 java代码 1 第一种:用于将java对象状态储存起来,通常放到一个文件中,使下次需要用到的时候再读取到它之前的状态信息. 2 第二种:可以让java对象在网络中传输. 3.序列化的是实现: java代码 1 1).需要序列化的类需要

关于 Java 对象序列化您不知道的 5 件事

数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数程序员对于 Java 平台都是浅尝则止,只学习了足以完成手头上任务的知识而已.在本 系列 中,Ted Neward 深入挖掘 Java 平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程挑战. 大约一年前,一个负责管理应用程序所有用户设置的开发人员,决定将用户设置存储在一个 Hashta

深入洞见:你所不知道的Java 对象序列化的5件事儿

关于 Java 对象序列化的一些有用的小知识 不易理解,但对于解决 Java 编程挑战迟早有用. 将 Java 对象序列化 API它从一开始就存在于 JDK 1.1 中.本文介绍的关于序列化的 几件事情将说服您重新审视那些标准 Java API. Java 序列化简介 Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,用于作为一种将 Java 对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回 Java 对象原有的状态. 到现在为止,还没有看到什么新鲜

java编解码技术,netty nio

对于java提供的对象输入输出流ObjectInputStream与ObjectOutputStream,可以直接把java对象作为可存储的字节数组写入文件,也可以传输到网络上去.对与java开放人员来说,默认的jdk序列化机制可以避免操作底层的字节数组,从而提升开发效率. 1.为什么需要序列化 网络传输与对象序列化 2.java编解码技术指的什么 netty nio是基于网络传输,当进行远程跨进程服务调用时,需要把被传输的对象编码为字节数组或者bytebuffer对象.而当远程服务读取到byt

Java IO: 序列化与ObjectInputStream、ObjectOutputStream

作者:Jakob Jenkov  译者: 李璟([email protected]) 本小节会简要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和ObjectOutputStream. Serializable 原文链接 如果你希望类能够序列化和反序列化,必须实现Serializable接口,就像所展示的ObjectInputStream和ObjectOutputStream例子一样. 对象序列化本身就是一个主题.Java IO系列教程主要关注流.read

Java的序列化与反序列化

Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二进制序列的形式在网络上传送.那么当两个Java进程进行通信时,能否实现进程间的对象传送

java 的序列化和反序列化的问题

引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写.然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识. 回页首 文章结构 本

java 对象序列化与反序列化

Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节序列的过程: Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二进制序列的形式在网络上传送.那么当两个Java进程进行通信时,能否实现进程间的