足球世界杯视频

什么是反序列化?反序列化的过程,原理

介绍

本篇主要分析java序列化、反序列化的过程,原理, 并且通过简化版URLDNS做案例分析利用链原理。

本篇很重要,打好基础是关键。

什么是序列化

我的理解很简单,就是将对象转化为可以传输、储存的数据。 什么意思? 正常一个对象,只能存在于程序运行时,当程序运行结束了,对象就消失了,对象只在程序运行时存在

如有这样一个需求,我想把user对象(包含了名字,年龄,身高,简历信息)传给数据持久化的服务(保存数据的服务)。 需要怎么做? 创建一个json对象,然后把user对象信息填写到json中, {“name”:“zhangsan”,“age”:12,“height”,12,“resume”:{“school”:“tsinghua”,“level”:1}} 然后把这个json传给持久化服务, 这样就要求每次传输数据时,都要将对象先转为json等格式数据,再进行传输,而且这只是简单的数据。 如果是更复杂的,对象A里有对象B、C,对象B又有D,则需要手动,将这些数据转成json,发送到远程服务器,再根据这些数据,还原对象。

而使用序列化,则是将user对象序列化为数据,传输到持久化服务器上时,再反序列化,就得到了user对象,让对象可以传输。 所以序列化,就是将对象转化为数据,相当与给对象拍了个快照,传输或者储存,使用时再反序列化,又变为了对象。

看下php序列化和反序列化过程:

执行结果:

再反序列化看下:

php的序列化将对象转化为了字符串,包含了对象的所有数据信息, 反序列化时再根据这些信息还原对象。

【一>所有资源获取<一】 1、200份很多已经买不到的绝版电子书 2、30G安全大厂内部的视频资料 3、100份src文档 4、常见安全面试题 5、ctf大赛经典题目解析 6、全套工具包 7、应急响应笔记 8、网络安全学习路线

JAVA序列化

一个java序列化对象例子:

class Person implements Serializable{

public String name;

public int age;

Person(String name,int age){

this.name = name;

this.age = age;

}

}

public class Main {

public static void main(String []args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {

FileOutputStream out =new FileOutputStream("person.txt");

ObjectOutputStream obj_out = new ObjectOutputStream(out);

obj_out.writeObject(new Person("z3",12));

}

}

FileOutputStream和ObjectOutputStream是java的流操作,可以把OutputStream当做一个单向流出的水管,FileOutputStream打开了文件,就相当于给文件接了一个File类型水管,然后把F