序列化和反序列化概念:
序列化:将对象转换为字节序列的过程
反序列化:把字节序列恢复为对象的过程
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
简单案例:
定义一个Person类,实现Serializable接口
package com.javaTest;
import java.io.Serializable;
public class Person implements Serializable{
/**
* 序列化ID
*/
private static final long serialVersionUID = 1L;
private int age;
private String name;
private String sex;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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;
}
}
序列化和反序列化Person对象
package com.javaTest;
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.text.MessageFormat;
/**
* 测试对象的序列化和反序列化
* @author Admin
*
*/
public class TestObject {
public static void main(String[] args) throws Exception, IOException {
SerializablePerson();//序列化Person
Person p=DeserializablePerson();//反序列化Person
System.out.println(MessageFormat.format("name={0},age={1},sex={2}", p.getName(),p.getAge(),p.getSex()));//, p.getName(),p.getAge(),p.getSex()
}
/**
* 序列化Person对象
* @throws IOException
* @throws FileNotFoundException
*/
private static void SerializablePerson() throws FileNotFoundException, IOException {
Person p=new Person();
p.setName("zhangsan");
p.setAge(20);
p.setSex("男");
//ObjectOutputStream 对象输出流,将Person对象存储到E盘的person.txt文件中,完成对Person对象的序列化操作
ObjectOutputStream oo=new ObjectOutputStream(new FileOutputStream(new File("E:/Person.txt")));
oo.writeObject(p);
System.out.println("Person对象序列化成功!");
oo.close();//关闭流
}
/**
* 反序列Person对象
* @return
* @throws IOException
* @throws FileNotFoundException
* @throws Exception
*/
private static Person DeserializablePerson() throws FileNotFoundException, IOException, Exception {
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File("E:/Person.txt")));
Person p=(Person) ois.readObject();
System.out.println("Person对象反序列化成功!");
return p;
}
}