首页 » PHP教程 » javaphp序列化技巧_运用Java实现PHP的序列化和反序列化函数serialize和unserialize

javaphp序列化技巧_运用Java实现PHP的序列化和反序列化函数serialize和unserialize

访客 2024-11-01 0

扫一扫用手机浏览

文章目录 [+]

福哥最近在把一部分功能从PHP转入Java里面,在处理PHP的序列化(Serialize)数据的时候碰着了问题,经由一番折腾找到了一个在Java里实现序列化的功能的第三方库。

现在,福哥将这个库的利用方法交给大家!

javaphp序列化技巧_运用Java实现PHP的序列化和反序列化函数serialize和unserialize

2. 依赖

首先导入phprpc的依赖库

javaphp序列化技巧_运用Java实现PHP的序列化和反序列化函数serialize和unserialize
(图片来自网络侵删)

<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措辞序列化的数据构造的须要了。

https://m.tongfu.net/home/35/blog/512939.html

标签:

相关文章

语言游戏聚会的魅力,跨界交流的盛宴

在繁忙的都市生活中,一场别开生面的语言游戏聚会悄然兴起。这不仅是一场简单的娱乐活动,更是一次跨界交流的盛宴,一场思想的碰撞与火花。...

PHP教程 2024-12-29 阅读1 评论0

语言序列逻辑在现代传播中的运用与影响

语言序列逻辑,作为现代传播学中的重要理论之一,对于理解语言传播的规律、提高传播效果具有重要作用。在信息化、网络化时代,语言序列逻辑...

PHP教程 2024-12-29 阅读1 评论0