java 的序列化

(1) 首先是java自己内部实现的对象序列化机制 其实就是ObjectInputStream 和 ObjectOutputStream

首先实现一个实体对象  记住必须实现Serializable 接口

package com.rpc;

import java.io.Serializable;

public class Student implements Serializable{

	private static final long serialVersionUID = 5915058853403173212L;

	private String id;
	private String name;
	private String sex;
	private int age;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

}

然后是将对象以文件的形式保存

package com.rpc;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class ObjectChuanshu {

	public static void main(String[] args) {
		Student student = new Student();
		student.setAge(23);
		student.setId("123");
		student.setName("张三");
		student.setSex("男");

		FileOutputStream fout = null;
		ObjectOutputStream oos = null;
		try{
			fout = new FileOutputStream(new File("d:/1.object"));
			oos = new ObjectOutputStream(fout);
			oos.writeObject(student);
			oos.flush();
			fout.flush();
		}catch(Exception e){
			System.out.println(e.getMessage());
			e.printStackTrace();
		}finally{
			try{
				oos.close();
				fout.close();
			}catch(Exception e){}

		}
	}
}

然后是从文件中读出对象

package com.rpc;

import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class ReadObject {

	public static void main(String[] args) {

		FileInputStream fin = null;
		ObjectInputStream ois = null;

		try{
			fin = new FileInputStream(new File("d:/1.object"));
			ois = new ObjectInputStream(fin);
			Student student = (Student)ois.readObject();
			System.out.println(student.getName());
		}catch(Exception e){
			System.out.println(e.getMessage());
			e.printStackTrace();
		}finally{
			try{
				fin.close();
				ois.close();
			}catch(Exception e){}
		}

	}
}

输出结果

张三

Hessian 的对象 序列化  需要添加 hessian.jar

package com.rpc;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;

public class HessianObject {

	private String filePath;

	public HessianObject(String filePath){
		this.filePath = filePath;
	}
	/**
	 * 将对象保存到指定的文件中
	 * @param filePath
	 * @throws Exception
	 */
	public byte[] writeObject(Student student) throws Exception{

		Hessian2Output hout = null;
		ByteArrayOutputStream baos = null;
		try{
			baos = new ByteArrayOutputStream();
			hout = new Hessian2Output(baos);
			hout.writeObject(student);
			hout.flush();
		}catch(Exception e){
			throw e;
		}finally{
		}
		return baos.toByteArray();
	}

	/**
	 * 读取文件中的对象
	 * @param filePath
	 * @throws Exception
	 */
	public Student readObject(byte[] buffer)throws Exception{

		Hessian2Input hin = null;
		Student student = null;
		ByteArrayInputStream bais = null;
		try{
            bais = new ByteArrayInputStream(buffer);
			hin = new Hessian2Input(bais);
			student =  (Student)hin.readObject();
		}catch(Exception e){
			throw e;
		}finally{
		}
		return student;
	}

	public static void main(String[] args) {

		HessianObject hessianObject = new HessianObject("d:/2.object");
		Student student = new Student();
		student.setAge(18);
		student.setId("12345");
		student.setName("李四");
		student.setSex("女");
		try{
			byte[] buffer = hessianObject.writeObject(student);
				Student s = hessianObject.readObject(buffer);
				System.out.println(s.getName());
		}catch(Exception e){
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}
}

输出结果

李四
时间: 2024-10-24 19:10:06

java 的序列化的相关文章

Java的序列化与反序列化

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

序列化之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(

java原生序列化和Kryo序列化性能比较

简介 最近几年,各种新的高效序列化方式层出不穷,不断刷新序列化性能的上限,最典型的包括: 专门针对Java语言的:Kryo,FST等等 跨语言的:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等 这些序列化方式的性能多数都显著优于hessian2(甚至包括尚未成熟的dubbo序列化).有鉴于此,我们为dubbo引入Kryo和FST这 两种高效Java序列化实现,来逐步取代hessian2.其中,Kryo是一种非常成熟的序列化实现,已经在Twitter.Group

Java对象序列化

深入理解Java对象序列化:http://developer.51cto.com/art/201202/317181.html

Java对象序列化和反序列化

Java对象序列化和反序列化 在Java中,我们如果要保存一个对象的瞬时状态值,以便在下次使用时能够得到这些值,或者持久化对象,或者使用RMI(远程方法调用),或在网络中传递对象时,此时我们就需要将对象序列化,实现序列化,我们只要实现Serializable接口,该接口是一个标记接口(Tag interface),即里面没有方法,其主要作用就是告诉JVM该类的对象可以进行序列化. 一般来说,很多类的对象都实现了Serializable接口,但是,有些对象是不能进行序列化的,比如与数据库相关的连接

java对象序列化小结

百度百科上介绍序列化是这样的: 序列化 (Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. 序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据.确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission.在默认策略下,通过 Internet 下载

java 对象序列化

上代码 /** * Person.java */ import java.io.*; public class Person implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String name; private int age; public Person(String str,int num) { name=str; age=num; } public S

java 对象序列化与反序列化

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

71. Java中序列化的serialVersionUID作用

Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象. 序列化是Java中实现持久化存储的一种方法:为数据传输提供了线路级对象表示法. Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常. Eclipse中The

Java对象序列化与反序列化

Java对象序列化与反序列化 对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输. 对象的序列化是将一个Java对象写入IO流:与此对应的,反序列化则是从IO流中恢复一个Java对象. 实现序列化 如果要将一个java对象序列化,那么对象的类需要是可序列化的.要让类可序列化,那么这个类需要实现如下两个接口