前言:最近开始学习java的序列化与反序列化,现在从原生的序列化与反序列化开始,小小的记录一下
参考文章:https://blog.csdn.net/mocas_wang/article/details/107621010
01.什么是序列化与反序列化
其实java的序列化说白了就是将一个对象转换成字节的过程,那么同理,java的反序列化也就是将一个字节转换会一个对象的过程,这样的操作会使得对象在不同的机器之间进行传递变得简单,我们在一台机器上将某个对象序列化之后那么只需要传递序列化之后的字节给另外一台机器,那么另外一台机器只需要进行对应的反序列操作就可以获得传递过来的对象。
下面来演示一下使用io流自带的接口进行序列化与反序列化:
1.首先定义一个Person类用于序列化的操作
1 import java.io.Serializable;
2 //必须继承Serializable接口才可被序列化
3 public class Person implements Serializable {
4 private String name;
5 private int age;
6
7 public Person(String name, int age) {
8 this.name = name;
9 this.age = age;
10 }
11
12 public Person() {
13 }
14
15 @Override
16 public String toString() {
17 return "Person{" +
18 "name='" + name + '\'' +
19 ", age=" + age +
20 '}';
21 }
22 }
View Code
2.正常情况下,我们通过以下代码进行实例化,然后打印出这个对象,应该会得到以下的结果
1 public static void main(String[] args) {
2 Person person = new Person("aa",22);
3 System.out.println(person);
4 }
3.那么现在我们用以下代码来对这个对象进行序列化,可以看到,对象的信息会被序列化的写入ser.bin文件中
1 public static void serialize(Object obj) throws IOException{
2 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ser.bin"));
3 oos.writeObject(obj);
4 }
4.那么接下来我们只要在另外一个类中,实现反序列化的代码,就可以很轻松的获取到原来想要传递的对象
1 import java.io.FileInputStream;
2 import java.io.FileNotFoundException;
3 import java.io.IOException;
4 import java.io.ObjectInputStream;
5
6 public class UnserializeTest {
7 public static Object unserialize(String Filename) throws IOException, ClassNotFoundException {
8 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Filename));
9 Object obj = ois.readObject();
10 return obj;
11 }
12
13 public static void main(String[] args) throws IOException, ClassNotFoundException {
14 Person person = (Person)unserialize("ser.bin");
15 System.out.println(person);
16 }
17 }
View Code