背景:由于数据库存放的数据是使用个php系列化进去的,需要java反系列化回来
本人:找到了一个插件并且使用maven 安装引入java库,
配置:
<dependency>
<groupId>org.sction</groupId>
<artifactId>phprpc</artifactId>
<version>3.0.2</version>
</dependency>
a:2:{s:4:\"name\";s:4:\"xiao\";s:3:\"sex\";s:3:\"man\";}
运行类代码:
package sun;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.phprpc.util.AssocArray;
import org.phprpc.util.Cast;
import org.phprpc.util.PHPSerializer;
public class Test_v2 {
public static void main(String[] args) throws Exception {
String test_v1= "a:2:{s:4:\"name\";s:4:\"xiao\";s:3:\"sex\";s:3:\"man\";}";//一维数组的系列化数据,[也可以是二维数组调用函数为getUnserializeList]
Test_v3 t = getUnserialize(test_v1);
System.out.println(t.getName());
System.out.println(t.getSex());
}
//一维数组,返回的
public static Test_v3 getUnserialize(String content) throws Exception {
PHPSerializer p = new PHPSerializer();
if (StringUtils.isEmpty(content))
return null;
Test_v3 t = (Test_v3) p.unserialize(content.getBytes(),Test_v3.class);
return t;
}
//多维数组返回
public static List<Test_v3> getUnserializeList(String content) throws Exception {
List<Test_v3> list = new ArrayList<Test_v3>();
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_v3 t = (Test_v3) Cast.cast(array.get(i), Test_v3.class);
list.add(t);
}
return list;
}
}
对象类代码:
package sun;
public class Test_v3 {
public Object value;
public int hv;
public Test_v3() {}
public Test_v3(Object value, int hv) {
this.value = value;
this.hv = hv;
}
//属性
private String name;
private String sex;
public String getName() {
return name;
}
public String getSex() {
return sex;
}
}
此种 反系列化不支持php这种格式的数组,这个
$data= array(
'name'=> 'xiao',
'param' => array('info'=> 'intro','content'=>'test'),
'sex' => 'man'
);
如果有知道有方法解决上面问题可以直接评论。。。