最近工作中遇到一个需要解析php序列化后存入DB的array,

a:4:{i:0;a:2:{s:11:"province";s:8:"0016";s:7:"img";s:49:"20150117105023_kk-1.jpg";}
i:1;a:2:{s:11:"province";s:8:"0017";s:7:"img";s:49:"20150117105025_kk-1.jpg";}}

而我们项目是使用java,就需要反序列化,还好有一个第三方类库可以使用,项目地址:http://www.phprpc.org/zh_CN/docs/

<dependency>
<groupId>org.sction</groupId>
<artifactId>phprpc</artifactId>
<version>3.0.2</version>
</dependency>

使用时,需要知道被序列化的对象是单个对象还是被以array的形式序列化的

若是单个对象,直接可以反序列化

public static Test getUnserialize(String content) throws Exception {
PHPSerializer p = new PHPSerializer();
if (StringUtils.isEmpty(content))
return null;
Test t = (Test) p.unserialize(content.getBytes(),Test.class);
return t;
}

若是array需要借助Cast类,转换成java对应的对象

public static List<Test> getUnserializeList(String content) throws Exception {
List<Test> list = new ArrayList<Test>();
PHPSerializer p = new PHPSerializer();
if (StringUtils.isEmpty(content))
return list;
AssocArray array = (AssocArray) p.unserialize(content.getBytes());
for (int i = 0; i < array.size(); i++) {
Test t = (Test) Cast.cast(array.get(i), Test.class);
list.add(t);
}
return list;
}

java反序列化php序列化的对象的更多相关文章

  1. java ArrayList的序列化分析

    一.绪论 所谓的JAVA序列化与反序列化,序列化就是将JAVA 对象以一种的形式保持,比如存放到硬盘,或是用于传输.反序列化是序列化的一个逆过程. JAVA规定被序列化的对象必须实现java.io.S ...

  2. 学习笔记 | java反序列化漏洞分析

    java反序列化漏洞是与java相关的漏洞中最常见的一种,也是网络安全工作者关注的重点.在cve中搜索关键字serialized共有174条记录,其中83条与java有关:搜索deserialized ...

  3. java中的序列化与反序列化,还包括将多个对象序列化到一个文件中

    package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java. ...

  4. java IO 对象流 反序列化和序列化

    例: 重点:需要序列化的对象必须实现Serializable接口 //需要序列化的对象 public class User implements Serializable { private Stri ...

  5. 【Java基础】序列化与反序列化深入分析

    一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...

  6. JAVA基础知识之IO——对象序列化

    对象序列化 Java对象序列化(Serialize)是指将Java对象写入IO流,反序列化(Deserilize)则是从IO流中恢复该Java对象. 对象序列化将程序运行时内存中的对象以字节码的方式保 ...

  7. 【Java】Java原生的序列化和反序列化

    写一个Java原生的序列化和反序列化的DEMO. 需序列化的类: package com.nicchagil.nativeserialize; import java.io.Serializable; ...

  8. Java IO5:序列化与反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  9. java中的序列化流和反序列化流

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px SimSun; color: #4e9072 } 序列化流:把对象按照流一样的方式存入文本文件 ...

随机推荐

  1. P1011 圆柱体的表面积

    题目描述 输入底面半径 \(r\) 和高 \(h\) ,输出圆柱体的表面积,保留 \(3\) 位小数. 输入格式 输入包含两个实数 \(r,h(1 \le r,h \le 1000)\) 且保证输入的 ...

  2. js快速替换json里的key值

    需求是将b根据a的值替换对象中的key值 let a = ["code","name","date","font"]; ...

  3. webpack4.0基本配置,超简单!

    最近复习了一下webpack,使用的是4.0版本. 下图是基本目录结构,最后留有代码地址,有兴趣可以去看看. 直接上代码(依赖未完全使用): 项目的所有依赖都可以安装,每个都有详细的注释.] cons ...

  4. iDrac6 虚拟控制台 连接失败

    最近给公司的服务器升级硬件(其实是服务器要淘汰了,公司就不管了,爱怎么折腾就怎么折腾,只要不坏就行) 服务器配置:Dell PowerEdge R610,E5606 x2(双路2.13G 4核4线程) ...

  5. 非GUI-Qt程序运行后显示Console(简单好用:在pro文件中加入: CONFIG += console)

    ----我的生活,我的点点滴滴!! 有很多时候,我们在程序中添加了好Debug信息,方便程序在运行期间打印出一些我们需要的信息或者,想用他来显示一些必要信息时, 那么console就太重要了,曾几何时 ...

  6. 【Linux】Linux下date,time等时间设置

    date命令的帮助信息 [root@localhost source]# date --help用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] ...

  7. C# 对象与引用变量

    从宏观的角度来看,对象是类的实例.比如: //定义一个名为Someone的类,代表这么一些人(通过指定年龄,性别,性格等基本信息)class Someone {  public int age;  p ...

  8. k8s集群———单master节点2node节点

    #部署node节点 ,将kubelet-bootstrap用户绑定到系统集群角色中(颁发证书的最小权限) kubectl create clusterrolebinding kubelet-boots ...

  9. 3.24 7.13 Python基础汇总

    对象类型 类型名称 示例 简要说明 备注 数字 int,float,complex 1234,3.14,1.3e5,3+4j 数字大小没有限制 十六进制用0x前缀和0-9,a-f表示 字符串 str ...

  10. socket粘包问题及解决方案

    一.粘包问题 问题1: 无法确认对方发送过来数据的大小. 'client.py' import socket client = socket.socket() client.connect( ('12 ...