什么是序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。
为什么需要序列化?
解决针对对象进行流操作的时候引发的问题?
怎么实现序列化?
序列化的实现非常容易,只需要实现serializable接口;序列化实现的原理在于将对象采用流进行读写,核心类为ObjectInputStream和ObjectOutputStream,采用ObjectOutputStream可以将对象进行序列化,采用OnjectInputStream可以将对象进行反序列化;序列化之后的对象成为字节码文件,可以存在内存中,硬盘中,反序列化之后的对象成为类文件
序列化实现案例:
首先我们创建一个实现serializable的Person类:
class Person implements Serializable{
public String name;
public String address;
public int age;
public Person(String name, String address, int age){
this.name = name;
this.address = address;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
'}';
}
}
接下来我们对person对象进行序列化与反序列化:
public class SerializableTest {
public static void main(String[] args) {
try{
//序列化:中间结果存储到磁盘
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\object.txt"));
Person person = new Person("奥巴马","火星",24);
objectOutputStream.writeObject(person);
objectOutputStream.flush();
objectOutputStream.close();
//反序列化
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\\object.txt"));
Person person1 = (Person) objectInputStream.readObject();
System.out.println(person1.toString());
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}