序列化
要将对象序列化,可以按照以下步骤进行操作:
- 实现Serializable接口:将要序列化的类实现Serializable接口。
- 创建ObjectOutputStream:创建一个ObjectOutputStream对象,用于将对象序列化为字节流。
- 写入对象:使用writeObject()方法将对象写入到输出流中。
- 关闭流:关闭输出流。
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class SerializationExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}
查看 person.ser 一堆乱码
反序列化
- 要将字节流反序列化为对象,可以按照以下步骤进行操作:
- 创建ObjectInputStream:创建一个ObjectInputStream对象,用于从字节流中读取对象。
- 读取对象:使用readObject()方法从输入流中读取对象。
- 关闭流:关闭输入流。
import java.io.FileInputStream;
import java.io.IOException
;
import java.io.ObjectInputStream;
public class DeserializationExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
五.漏洞成因
官方允许用户在被序列化的类中重写 readObject() 方法 , 重写后的方法将负责在反序列化时重构当前类对象 . 用户只需要在重写的 readObject() 方法中实现 defaultReadObject() 方法 , 就可以确保反序列化过程正常执行 .
序列化前,在 person 类中加入重写的 readObject 方法
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject();
Runtime.getRuntime().exec("calc");
}
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
[外链图片转存中…(img-SkU5RQSI-1719159127704)]
[外链图片转存中…(img-nkXNDueo-1719159127704)]
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补