首页 > 编程 > Java > 正文

Java中的序列化以及反序列化

2019-11-08 03:26:28
字体:
来源:转载
供稿:网友

背景以及意义

远程通信中,无论何种类型的数据都是以二进制的形式在网络中传输。发送方需要将java对象转换为字节序列;接收方需要将字节序列回复为Java对象。或者是将某些对象进行序列化,以便长期保存到物理硬盘。比如Web服务器中的session对象,当有海量用户并发访问时,会有大量的Session对象,内存是无法容下的。

概念

序列化:把Java对象转换成字节序列的过程

反序列化:把字节序列恢复为Java对象的过程

如何序列化?

只有实现了Serializable和Externalizable接口的类的对象才能被序列化。实现了Externalizable的类完全由自身控制序列化行为,而仅实现Serializable接口的类可以采用默认的序列化方式。

对象序列化的步骤:

创建一个对象输出流,可以包装一个其他类型的输出流,如文件输出流;通过对象输出流的writeObject()方法写出对象。

对象反序列化的步骤:

创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;通过对象输入流的readObject()方法读取对象。

举例说明:

实现了Serializable接口的Person类

package 序列化练习;import java.io.Serializable;public class Person implements Serializable {	String name;	int age;		public Person(String name, int age){		this.name = name;		this.age = 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;	}	}序列化以及反序列化测试:

package 序列化练习;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.SerializablePermission;public class ObjSerializeDeserialize {	static String pathname = "resource/Person.txt";	public static void main(String[] args) throws Exception{		serializePerson();		Person p = deserializePerson();		System.out.PRintln(p.name+" "+p.age);	}		public static void serializePerson() throws FileNotFoundException, IOException{		Person p = new Person("owen",24);		ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File(pathname)));		oo.writeObject(p);		System.out.println("Serialize successfully!");		oo.close();	}		public static Person deserializePerson() throws FileNotFoundException, IOException, ClassNotFoundException{		ObjectInputStream oi = new ObjectInputStream(new FileInputStream(new File(pathname)));		Person p = (Person) oi.readObject();		System.out.println("Deserialize successfully!");		return p;	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表