博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java对象序列化与反序列化(1)
阅读量:4087 次
发布时间:2019-05-25

本文共 2320 字,大约阅读时间需要 7 分钟。

序列化机制允许将实现序列化的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的开发中非常重要。希望可以引起读者重视。

你可能感兴趣的文章
zookeeper(3)---zookeeper API的简单使用(增删改查操作)
查看>>
zookeeper(4)---监听器Watcher
查看>>
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
SSM-CRUD(2)---查询
查看>>
SSM-CRUD (3)---查询功能改造
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>
设计模式 依赖倒转原则 & 里氏代换原则
查看>>
DirectX11 光照
查看>>
图形学 图形渲染管线
查看>>
DirectX11 计时和动画
查看>>
DirectX11 光照与材质的相互作用
查看>>
DirectX11 法线向量
查看>>