《Java反序列化基础篇(上):从零开始的探索》

135 阅读2分钟

0x01 序列化与反序列化

1.什么是序列化与反序列化

序列化:对象 -> 字符串

反序列化:字符串 -> 对象

2. 为什么我们需要席列化与反席列化

。一开始学的时候还是不知道的。

序列化与反序列化的设计就是用来传输数据的。

当两个进程进行通信的时候,可以通过序列化反序列化来进行传输。

序列化的好处

  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);  
 }  
}

如果时间宽裕,明天会出代码讲解 为什么会产生序列化的安全问题(中)