1. Java对象序列化与反序列化已经被JSON与XML给代替了。
2. 序列化: 把Java对象转换为字节序列的过程。
3. 反序列化: 把字节序列恢复为Java对象的过程。
4. 对象序列化主要有两种用途:
- 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
- 在网络上传送对象的字节序列。
5. 只能将支持 java.io.Serializable 接口的对象写入流中。
6. 序列化方法: java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
7. 反序列化方法: java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
8. 示例如下
import java.io.Serializable;
/**
* <p>description 测试对象序列化和反序列化,对象Person</p>
* <p>date 2016年7月24日 下午9:25:51</p>
* @author Administrator
* @version
* @since
*/
public class Person implements Serializable {
/**
* 序列化ID
*/
private static final long serialVersionUID = -5809782578272943999L;
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;
}
}
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;
/**
* @description 测试对象的序列化和反序列化
* @author Administrator
* @date 2016年7月24日 下午7:18:53
* @version
* @since
*/
public class TestObjSerializeAndDeserialize {
static String pathname = "resource/Person.txt";
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
serializePerson();
Person p = deSerializePerson();
String pattern = "name={0},age={1},sex={2}";
Object[] arguments = {p.getName(),p.getAge(),p.getSex()};
System.out.println(MessageFormat.format(pattern, arguments));
}
/**
*
* <p>description 序列化Person对象</p>
* <p>date 2016年7月24日 下午9:23:36</p>
* @author Admin
*
* @throws FileNotFoundException
* @throws IOException
*/
private static void serializePerson() throws FileNotFoundException, IOException{
Person person = new Person();
person.setName("bonjean");
person.setAge(25);
person.setSex("男");
//ObjectOutputStream对象输出流,将Person对象存储到resource目录的Person.txt文件中(pathname),完成对Person对象的序列化操作
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(new File(pathname)));
oo.writeObject(person);
System.out.println("Person对象序列化成功!");
oo.close();
}
/**
*
* <p>description 反序列化Person对象</p>
* <p>date 2016年7月24日 下午10:23:25</p>
* @author Admin
*
* @return Person
* @throws Exception
* @throws IOException
*/
private static Person deSerializePerson() throws Exception, IOException{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File(pathname)));
Person person = (Person)ois.readObject();
System.out.println("Person对象反序列化成功!");
return person;
}
}