php数组序列化函数(php常用数组函数和用法)

1.介绍1.1介绍福哥最近在把一部分功能从PHP转入Java里面,在处理PHP的序列化(Serialize)数据的时候遇到了问题,经过一番折腾找到了一个在Java里实现序列化的功能的第三方库。现在,福哥将这个库的使用方法交给大家!!2.依赖首先

1. 介绍

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 {
    PHPSerializer ps = new PHPSerializer();
    String s;

    s = (String) ps.unserialize(new String(\"s:12:\"福哥真好\";\").getBytes(), String.class);

    return s;
}
catch (Exception e){
    e.printStackTrace();
}

php数组序列化函数(php常用数组函数和用法)

3.2 单整型类型

原数据就是一个整型数字

try {
    PHPSerializer ps = new PHPSerializer();
    Integer s;

    s = (Integer) ps.unserialize(new String(\"i:518168;\").getBytes(), Integer.class);

    return s;
}
catch (Exception e){
    e.printStackTrace();
}

3.3 单双精类型

原数据就是一个小数

try {
    PHPSerializer ps = new PHPSerializer();
    Double s;

    s = (Double) ps.unserialize(new String(\"d:518168.99;\").getBytes(), Double.class);

    return s;
}
catch (Exception e){
    e.printStackTrace();
}

3.4 NULL类型

原数据就是一个null,由于没有类型,反序列化会失败

try {
    PHPSerializer ps = new PHPSerializer();
    String s;

    s = (String) ps.unserialize(new String(\"N;\").getBytes(), String.class);

    return s;
}
catch (Exception e){
    e.printStackTrace();
}

3.5 实体对象类型

如果原数据是一个对象(就是数组的下标为字符串的情况),那么就可以建立同样结构的实体对象,使用这个实体对象可以直接接收数组数据

注意:实体对象必须是public的

3.5.1 实体对象

@Data
public class MyUser {
    Integer id;
    String name;
    String note;
}

3.5.2 反序列化

try {
    PHPSerializer ps = new PHPSerializer();
    MyUser s;

    s = (MyUser) ps.unserialize(new String(\"a:3:{s:2:\"id\";i:35;s:4:\"name\";s:15:\"鬼谷子叔叔\";s:4:\"note\";s:1:\"s\";}\").getBytes(), MyUser.class);

    return s;
}
catch (Exception e){
    e.printStackTrace();
}

php数组序列化函数(php常用数组函数和用法)

3.6 数组类型

如果原数据是一个数组(就是数组下标为数字的情况)的话,那么可以使用AssocArray类型将结果集先收集起来,然后再使用Cast对象将数据转换成Java对应的类型

注意:实体对象必须是public的

3.6.1 实体对象

@Data
public class MyTag {
    Integer id;
    String tag;
}

3.6.2 反序列化

try {
    PHPSerializer ps = new PHPSerializer();
    List<MyTag> s = new ArrayList<>();
    AssocArray aa;

    aa = (AssocArray) ps.unserialize(new String(\"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(int i=0;i<aa.size();i++){
        s.add((MyTag) Cast.cast(aa.get(i), MyTag.class));
    }

    return s;
}
catch (Exception e){
    e.printStackTrace();
}

php数组序列化函数(php常用数组函数和用法)

4. 总结

可以看到PHPSerializer基本可以满足我们在Java反序列化使用PHP语言序列化的数据结构的需要了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/45200.html

(0)
nan
上一篇 2021-11-14
下一篇 2021-11-14

相关推荐

  • 淘宝手艺人平台怎么样(淘宝手艺人怎么入驻)

    淘宝除了商家入驻之外,一些安装师傅和做手艺的人也是可以入驻淘宝的。特别是在当今手艺逐渐失传的年代,这门技术就显得格外重要。那么,淘宝手艺人如何入驻?1.商家进行入驻到“淘宝手艺人”活动当种是不需要缴纳任何费用的,且不需要任何机构和个人的

    2021-11-12
    0
  • 网页ico设置方法(网站图标怎么设置)

    网站是企业重要的展示形象、对外宣传、从互联网引流获客的窗口,所以网站建设就显得尤为重要。想要把一个初始网站建设好,图片的设置是重中之重。今天就跟大家科普下关于企业网站建设图片的5个要点。1.重点突出首先你要明白,访客都是没什么耐性的。如

    2021-11-29 创业分享
    0
  • 2021抖音大数据报告(抖音用户数据分析)

    移动互联网在国内刚兴起时,互联网圈流传着一条创业黄金法则——“所有的行业都值得重做一遍”。当下的字节跳动,大有一种“一切业务都值得在抖音上重做一遍”的势头。在互联网人口红利见顶、获客成本越来越高的格局下,流量就意味着一切。毫无疑问,抖音是

    2021-11-23
    0
  • 手机上怎么贷款(教你如何通过手机银行贷款)

    在前面的文章《你对银行手机操作贷款了解多少》中,对银行的线上贷款做了一个简单地说明。这次主要就具体的操作方式做一个简单的普及。写在前面还是先友情提示,在操作银行线上贷款时,先问问自己是否确实需要此笔贷款解决资金问题,如确有合理正当用途,再决定是否申请

    2022-01-08
    0
  • 合同补充协议范本怎么写(合同价格补充协议书范本)

    在工程施工过程中,都是会签订施工合同的,当事人如果在签订合同之后,如果后续发现合同的内容需要补充的情况,是可以拟定补充协议约定后续事宜的,接下来就由法律快车小编整理的关于施工合同补充协议怎么写的相关内容。在工程施工过程中,都是会签订施工合同的,

    2021-12-29
    0
  • 普通上班族的六个理财技巧(工薪阶层怎样理财)

    为什么你总存不住钱?普通上班族的六个理财技巧,做到三点就够了!大多数的普通上班族,主要收入来源于工资,每个月的固定消费,也是必不可少,但其他消费无边无际,如果不加节制,几乎存不下什么钱。牢记这六招,摆脱月光族,一年能存两年的钱。第一,不要

    2021-11-15 创业分享
    0

发表回复

登录后才能评论