0x01 序列化与反序列化
1.什么是序列化与反序列化
序列化:对象 -> 字符串
反序列化:字符串 -> 对象
2. 为什么我们需要席列化与反席列化
。一开始学的时候还是不知道的。
序列化与反序列化的设计就是用来传输数据的。
当两个进程进行通信的时候,可以通过序列化反序列化来进行传输。
序列化的好处
-
能够实现数据的持久化,通过序列化可以把数据永久存储在硬盘上,也可以理解为通过序列化将数据保存在文件中。
-
利用反序列化实现远程通信,在网络上传送对象的字节序列。
应用场景
- (1)想把内存中的对象保存到一个文件中或者是数据库当中
- (2)用套接字在网络上传输对象
- (3)通过 RMI传输对象的时候
3.几种创建的序列化和反序列化协议
XML&SOAP JSON Protobuf
0x02 序列化与反序列化代码实现
1.Code 展示,便于大家 Copy 省时间
//类文件:Person.java
package src; // 修改成自己的 Package 路径
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public Person(){
}
// 构造函数
public Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString(){
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- 序列化文件SerilizationTest.java
package src;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
public class SerializationTest {
public static void serialize(Object obj) throws IOException{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("ser.bin"));
oos.writeObject(obj);
}
public static void main(String[] args) throws Exception{
Person person = new Person("aa",22);
System.out.println(person);
serialize(person);
}
}
- 反序列化文件 UnserializeTest.java
package src;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class UnserializeTest {
public static Object unserialize(String Filename) throws IOException, ClassNotFoundException{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Filename));
Object obj = ois.readObject();
return obj;
}
public static void main(String[] args) throws Exception{
Person person = (Person)unserialize("ser.bin");
System.out.println(person);
}
}
如果时间宽裕,明天会出代码讲解 为什么会产生序列化的安全问题(中)