介绍
Java序列化是指把Java对象转换为字节序列的过程(可以直接以二进制的形式写入文件,也可以进行网络传输);而Java反序列化是指把字节序列恢复为Java对象的过程。
应用场景
- 我们都知道,在进行网络传输或者进程间通信的时候,有时候需要传输文件,视频,音频等,它们都是以二进制的形式进行传输,那么对象也是可以进行传输的,这就应用了序列化.
- 再一个,正常情况下,一个对象的生命周期是从new实例开始到程序结束或者被垃圾回收程序回收,那么有没有一种情况可以将对象永久保存在硬盘中呢,这就要使用序列化了,将对象以二进制的形式写入文件中,这个过程也叫对象的持久化.
实现
序列化之前要让类实现Serializable接口,这个接口是一个空接口,为的是作为一个标记,说明这个类实例的对象可以进行序列化,同时,最好还是增加一个序列化UID
先定义个学生类
Student.java
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String birth;
public Student(String id, String name, String birth) {
super();
this.id = id;
this.name = name;
this.birth = birth;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return birth;
}
public void setGender(String birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", birth=" + birth + "]";
}
}
序列化
/**
*
* @功能:将对象序列化
* @时间:2017年3月6日 下午1:59:15
* @throws IOException
*/
public static void outputObject() throws IOException {
List<Student> list = new ArrayList<>();
list.add(new Student("111", "mali1", "jj"));
list.add(new Student("222", "mali2", "hut"));
list.add(new Student("333", "mali3", "gfgd"));
OutputStream out = new FileOutputStream("source\\object", true);
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(list);
oos.flush();
oos.close();
out.close();
}
反序列化
/**
*
* @功能:将对象反序列化
* @时间:2017年3月6日 下午1:59:28
* @throws IOException
* @throws ClassNotFoundException
*/
public static void inputObject() throws IOException, ClassNotFoundException {
FileInputStream in = new FileInputStream("source\\object");
ObjectInputStream ois = new ObjectInputStream(in);
@SuppressWarnings("unchecked")
List<Student> list = (ArrayList<Student>) ois.readObject();
ois.close();
in.close();
for (Object object : list) {
System.out.println(((Student) object).getId() + "," + ((Student) object).getName() + ","
+ ((Student) object).getGender());
}
}