文章插图
文章插图
1. 介绍
【php反序列化函数 php序列化和反序列化】1.1 介绍
福哥最近在把一部分功能从PHP转入Java里面,在处理PHP的序列化(Serialize)数据的时候遇到了问题,经过一番折腾找到了一个在Java里实现序列化的功能的第三方库 。
现在,福哥将这个库的使用方法交给大家!!
2. 依赖
首先导入phprpc的依赖库
<dependency><groupId>org.sction</groupId><artifactId>phprpc</artifactId><version>3.0.2</version></dependency>
3. 使用使用PHPSerializer反序列化经过PHP序列化过的字符串需要知道目标字符串里存的是什么类型的数据,不同的数据类型是需要使用不同的实体对象去接收反射数据的 。
3.1 单字符串类型
原数据就是一个字符串
try{PHPSerializerps=newPHPSerializer();Strings;s=(String)ps.unserialize(newString("s:12:"福哥真好";").getBytes(),String.class);returns;}catch(Exceptione){e.printStackTrace();}
3.2 单整型类型原数据就是一个整型数字
try{PHPSerializerps=newPHPSerializer();Integers;s=(Integer)ps.unserialize(newString("i:518168;").getBytes(),Integer.class);returns;}catch(Exceptione){e.printStackTrace();}
3.3 单双精类型原数据就是一个小数
try{PHPSerializerps=newPHPSerializer();Doubles;s=(Double)ps.unserialize(newString("d:518168.99;").getBytes(),Double.class);returns;}catch(Exceptione){e.printStackTrace();}
3.4 NULL类型原数据就是一个null,由于没有类型,反序列化会失败
try{PHPSerializerps=newPHPSerializer();Strings;s=(String)ps.unserialize(newString("N;").getBytes(),String.class);returns;}catch(Exceptione){e.printStackTrace();}
3.5 实体对象类型如果原数据是一个对象(就是数组的下标为字符串的情况),那么就可以建立同样结构的实体对象,使用这个实体对象可以直接接收数组数据
注意:实体对象必须是public的
3.5.1 实体对象
@DatapublicclassMyUser{Integerid;Stringname;Stringnote;}
3.5.2 反序列化try{PHPSerializerps=newPHPSerializer();MyUsers;s=(MyUser)ps.unserialize(newString("a:3:{s:2:"id";i:35;s:4:"name";s:15:"鬼谷子叔叔";s:4:"note";s:1:"s";}").getBytes(),MyUser.class);returns;}catch(Exceptione){e.printStackTrace();}
3.6 数组类型如果原数据是一个数组(就是数组下标为数字的情况)的话,那么可以使用AssocArray类型将结果集先收集起来,然后再使用Cast对象将数据转换成Java对应的类型
注意:实体对象必须是public的
3.6.1 实体对象
@DatapublicclassMyTag{Integerid;Stringtag;}
3.6.2 反序列化try{PHPSerializerps=newPHPSerializer();List<MyTag>s=newArrayList<>();AssocArrayaa;aa=(AssocArray)ps.unserialize(newString("a:3:{i:0;a:2:{s:2:"id";i:15;s:3:"tag";s:5:"C/C++";}i:1;a:2:{s:2:"id";i:16;s:3:"tag";s:4:"Java";}i:2;a:2:{s:2:"id";i:18;s:3:"tag";s:3:"PHP";}}").getBytes());for(inti=0;i<aa.size();i++){s.add((MyTag)Cast.cast(aa.get(i),MyTag.class));}returns;}catch(Exceptione){e.printStackTrace();}
4. 总结可以看到PHPSerializer基本可以满足我们在Java反序列化使用PHP语言序列化的数据结构的需要了 。
- 台式机键盘没有反应灯不亮 台式机键盘没有反应怎么办
- 笔记本电脑键盘鼠标没反应怎么办 笔记本电脑键盘鼠标没反应是怎么回事
- ducky机械键盘官网 ducky键盘没反应
- php时间代码分秒 php时间函数代码
- 教你分辨汽车轮胎正反面 装反危险多多万万注意
- 电脑反间谍软件 间谍软件是什么
- 情侣检讨书500字反省本身 给女伴侣写认错检讨书撩妹套路
- 中国的反重力技术有何突破 中国的反重力技术
- 喜欢一个人的正常生理反应 男人见到喜欢的人反应
- 胡桃壳的鞋子和手套 胡桃壳的鞋子和手套 反思