序列化
概述
- Java提供了一种对象序列化的机制,通过该机制,可以将一个对象表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型
- 序列化:对象转化为字节序列
- 反序列化:字节序列转化为对象
- 对于序列化的过程是Java虚拟机(JVM)独立的,因此在一个平台序列化的对象,可以在另一个完全不同的平台反序列化该对象
5 ObjectInputStream类和ObjectOutputStream类是高层次的数据流,包含了反序列化和序列化对象的方法
代码
package _Serialization_01;
import java.io.*;
public class SerializeDemo {
public static void main(String args[]) {
Employee em = new Employee();
em.setName("test01");
em.setAddr("addr01");
em.setNumber(85);
//序列化
//test01(em);
//反序列化
test02();
}
//序列化
public static void test01(Employee em) {
try {
FileOutputStream fileOutputStream = new FileOutputStream("employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOutputStream);
out.writeObject(em);
out.close();
fileOutputStream.close();
System.out.println("Serialized data is saved in /employee.ser");
}
catch(IOException e) {
e.printStackTrace();
}
}
//反序列化
public static void test02() {
try {
FileInputStream fileInputStream = new FileInputStream("employee.ser");
ObjectInputStream in = new ObjectInputStream(fileInputStream);
Employee em = (Employee) in.readObject();
in.close();
fileInputStream.close();
System.out.println(em.getName());
System.out.println(em.getAddr());
System.out.println(em.getNumber());
}
catch(IOException e) {
e.printStackTrace();
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Employee类
package _Serialization_01;
import java.io.*;
public class Employee implements Serializable {
private String name;
private String addr;
private int number;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}