序列化

PHP之:序列化和反序列化-serialize()和unserialize()

邮差的信 提交于 2020-03-02 00:28:00
参考PHP在线手册( php.net ): http://php.net/manual/zh/function.serialize.php 1、 序列化 serialize() 将变量 序列化 — Generates a storable representation of a value — 产生一个可存储的值的表示 说明 serialize() 返回字符串,此字符串包含了表示 de style="margin: 0px; padding: 0px;" >valuede> 的字节流,可以存储于任何地方。 这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。 想要将已序列化的字符串变回 PHP 的值,可使用 unserialize() 。 serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。 当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。 Note: 在 PHP 3 中,对象属性将被序列化,但是方法则会丢失。PHP 4 打破了此限制

java反序列化-ysoserial-调试分析总结篇(3)

自古美人都是妖i 提交于 2020-03-01 19:45:51
前言: 这篇文章主要分析commoncollections3,这条利用链如yso描述,这个与cc1类似,只是反射调用方法是用的不是invokeTransformer而用的是InstantiateTransformer,整个调用过程如下图 利用链分析: 如上图所示,入口点还是Annotationinvoationhandler的Entryset 此时将会调用membervalues.get,其中var4位entryset,而membervalues中存储的为lazymap类的实例,即调用lazymap的get函数 即接着调用chainedTransformer来对key进行转换 其中iTransformer中存储了除了constantTransformer直接返回类,这里使用的类是class com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter 接下来到了InstantiateTransformer的transformer函数,这里面会拿到input对应类的参数类型为templates的构造函数,然后再实例化 接着一路跟到TrAXFilter的构造函数中,可以看到这里实际上调用了templates.newTransformer,那我们知道templatesImpl的可以通过_bytecode 接下来的过程就不在叙述

理解PHP数组的序列化和反序列化

时光总嘲笑我的痴心妄想 提交于 2020-03-01 14:09:27
  当我们想要将数组值存储到数据库时,就可以对数组进行序列化操作,然后将序列化后的值存储到数据库中。其实 PHP序列化数组就是将复杂的数组数据类型转换为字符串,方便数组存库操作 。对PHP数组进行序列化和反序列化操作,主要就用到两个函数, serialize 和 unserialize 。 一、PHP数组序列化:serialize 1 $arr = array('PHP','Java','Python','C'); 2 $result = serialize($arr); 3 echo $result; 运行: a:表示整体的数据类型,这里是array; a:4中的4:表示数组元素的个数; i:表示int,整型; 0:表示数组元素的下标; s:表示string,即数组值的类型; s:3中3:表示数组值的长度。 ps: serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。 二、PHP反序列化:unserialize 1 $arr = array('PHP','Java','Python','C'); 2 $result = serialize($arr); 3 var_dump(unserialize($result)); 运行: ps: unserialize()

Python学习之路(十六):基础知识之序列化模块

拈花ヽ惹草 提交于 2020-03-01 13:16:48
一、序列化模块之json 序列:列表/元组/字符串/bytes 将其他的数据类型转换成字符串bytes 等序列化的过程。 为什么要学习序列化模块呢?数据类型之间的转换不是还另有方法吗?比如: 1 str_dic = str([1, 2, 3]) 2 print(str_dic, type(str_dic)) 3 res = eval(str_dic) 4 print(res, type(res)) 但是这样,如果我们接受到的内容是恶意的话,强制转换后执行会带来一定的严重后果。 使用序列化模块可以将已知的代码根据自己的逻辑进行拼接,保存到文件中在适当的时候进行反序列化进而进行调用。 1.json.dumps()以及json.loads() import json1 dic = {'key': 'value', 'key2': 'value2'} 2 import json 3 ret = json.dumps(dic) # 序列化 4 print(dic, type(dic)) 5 print(ret, type(ret)) 6 7 res = json.loads(ret) # 反序列化 8 print(res, type(res)) 使用这一对可以将序列化的内容存到文件中,并且通过反序列化调用 import json1 dic = {1: 'value1', 2: 'value2

java序列化

醉酒当歌 提交于 2020-03-01 10:35:06
java序列化 为什么要使用序列化   我们在java内存中的对象是无法直接进行网络通信或者将其持久化的,因为对象时无法进行网络传输或者IO通信的,我们必须在使用它之前将其转换成某种可传输的格式,那么就是序列化了。序列化传输之后要将其转化为可使用的对象,就是反序列化的过程了。所以序列化就是将一个对象转化为二进制字节数组从而可以达到进行传输或者持久化的目的;而反序列化就是将一个字节数组重新构造成对象的过程。 如何实现序列化    在java中,jdk提供序列化的方法,只需要将待序列化的类实现java.io.Serializable接口即可,而我们可以看到Serializable接口实际上是没有任何抽象方法的,所以不需要实现什么方法,有一点需要注意的是在被序列化的类中需要定义一个SerialVersionUID参数,这个参数是被序列化类的一个"版本号",在反序列化的时候java虚拟机会将接收到的字节流中的 SerialVersionUID与本地实体类中的SerialVersionUID进行比对是否一致,如果一致则进行反序列化,否则拒绝进行反序列化并且抛出异常。SerialVersionUID参数生成方式有两种: 1、手动对SerialVersionUID赋值默认值(1L或者其他); 2、根据类名、方法、接口、属性等进行hash生成一个64位的值。  

序列化和反序列化

旧城冷巷雨未停 提交于 2020-03-01 10:25:55
序列化和反序列化?    互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。    狭义的理解:     序列化:将对象转换成二进制串的过程。     反序列化:将序列化过程中产生的二进制串转换成对象的过程。    广义的理解:     序列化:将对象转换成可用于保存和传输的一种形式(例如:二进制串、XML、Soap形式)的过程。     反序列化:序列化的逆向过程。 C#中的序列化和反序列化   在C#中常见的序列化方法主要有三种:BinaryFormatter、SoapFormatter、XML序列化。下面通过一个简单的示例看看三者之间的区别。   首先,新建一个控制台程序,添加一个Person类,用于被反序列化,代码如下:   using System; namespace Demo_Serializable { [Serializable] public class Person { public string Sno { get; set; } public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } public string DisplayInfo() { return

java类和对象:类的序列化

我们两清 提交于 2020-03-01 10:20:03
1、序列化介绍 Java 串行化技术可以使你将一个对象的状态写入一个Byte流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的串行化机制是RMI、EJB等技术的技术基础。 用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。 序列化是为了解决在对对象流进行读写操作时所引发的问题。 2、串行化的特点 (1)如果某个类能够被串行化,其子类也可以被串行化。如果该类有父类,则分两种情况来考虑,如果该父类已经实现了可串行化接口。则其父类的相应字段及属性的处理和该类相同;如果该类的父类没有实现可串行化接口,则该类的父类所有的字段属性将不会串行化。 (2)声明为 static和transient类型的成员数据不能被串行化 。因为static代表类的状态, transient代表对象的临时数据; (3)相关的类和接口:在java.io包中提供的涉及对象的串行化的类与接口有ObjectOutput接口、ObjectOutputStream类、ObjectInput接口

php中序列化与反序列化

本秂侑毒 提交于 2020-03-01 10:17:32
把复杂的数据类型压缩到一个字符串中 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 eg: $stooges = array('Moe','Larry','Curly');$new = serialize($stooges);print_r($new);echo "<br />";print_r(unserialize($new)); 结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";} Array ( [0] => Moe [1] => Larry [2] => Curly ) 当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理: $shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4);echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'">next</a>'; margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据。 如果magic_quotes

php中序列化与反序列化

杀马特。学长 韩版系。学妹 提交于 2020-03-01 10:11:16
转自: http://qing.weibo.com/tag/unserialize 把复杂的数据类型压缩到一个字符串中 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 eg: $stooges = array('Moe','Larry','Curly');$new = serialize($stooges);print_r($new);echo "<br />";print_r(unserialize($new)); 结果: a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";} Array ( [0] => Moe [1] => Larry [2] => Curly ) 当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理: $shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4);echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'">next</a>'; margic_quotes_gpc和magic_quotes

C# Json 序列化与反序列化二

社会主义新天地 提交于 2020-03-01 10:10:45
/// <summary> /// 将对象转换为 JSON 字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="input"></param> /// <returns></returns> public static string ScriptSerialize<T>(T input) { string _jsonString = string.Empty; if (input != null) { JavaScriptSerializer _serializerHelper = new JavaScriptSerializer(); _serializerHelper.MaxJsonLength = int.MaxValue; _jsonString = _serializerHelper.Serialize(input); } return _jsonString; } /// <summary> /// 将指定的 JSON 字符串转换为 T 类型的对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="input"></param> /// <returns></returns> public