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

Java对象序列化与反序列化(1)

时间:2015-05-15 13:39:52      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:javase   io流   序列化   反序列化   serializable   

序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以被保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。

对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指从IO流中恢复该Java对象。如果需要让某个对象可以支持序列化机制,必须让它的类是可序列化的(serializable),为了让某个类是可序列化的,该类必须实现如下两个接口之一:

(1)Serializable
(2)Externalizable


一旦某个类实现了Serializable接口,则该类的对象就是可序列化的,程序可以通过如下两个步骤来序列化该对象。
序列化的步骤:
(1)创建一个ObjectOutputStream,这个输出流是一个处理流,所以必须建立在其他节点流的基础之上。
(2)调用ObjectOutputStream对象的writeObject方法输出可序列化对象。


反序列化的步骤:
(1)创建一个ObjectInputStream,这个输入流是一个处理流,所以必须建立在其他节点流的基础之上。 

(2)调用ObjectInputStream对象的readObject对象读取流中的对象,该方法返回一个Object类型的Java对象,如果程序知道该Java对象的类型,则可以将该对象强制类型转换成其真实的类型。 


下面仅以实现Serializable接口为例,以一个完整的实例演示序列化与反序列化的过程:

1. Person.java

import java.io.Serializable;

public class Person implements Serializable
{
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
}

2.WritePerson.java

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class WritePerson {

	public static void main(String[] args) 
	{
		//创建ObjectOutputStream(处理流,必需建立在其他节点流之上)对象
		try {
			ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("per.txt"));
			Person per=new Person("张三",18);
			oos.writeObject(per);
			oos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

3. ReadPerson .java

public class ReadPerson {

	public static void main(String[] args) {
		try(ObjectInputStream ois=new ObjectInputStream(new FileInputStream("per.txt")))
			{
				Person per=(Person)ois.readObject();
				System.out.println(per.getName()+"-----------"+per.getAge());
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
}

在JavaEE中,一般要求每个JavaBean都是可序列化的。序列化机制在JavaEE的开发中非常重要。希望可以引起读者重视。

技术分享


Java对象序列化与反序列化(1)

标签:javase   io流   序列化   反序列化   serializable   

原文地址:http://blog.csdn.net/sinat_26342009/article/details/45743289

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