java反序列化php序列化的对象
1、原始数据为一个字符串
2、原始数据为一个对象
3、原始数据为一个集合(List 或Map)
1、反序列化为java字符串
s:21:"这是一个字符串";
String str = "s:21:\"这是一个字符串\"";
PHPSerializer phpSerializer = new PHPSerializer();
Object obj= phpSerializer.unserialize(str.getBytes("utf-8"));
System.out.println(new String((byte[])obj));
2、反序列化为java对象
设定一个 Person 类:
public class Person {
String name;
Integer age;
String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "[name:"+name+",age:"+age+",gender:"+gender+"]";
}
}
序列后的数据:
a:3:{s:4:"name";s:5:"henry";s:3:"age";i:35;s:6:"gender";s:3:"男";}
反序列化: 可以用一个Person类的对象来接收。
Person person = (Person)phpSerializer.unserialize(serializeString.getBytes(),Person.class);
System.out.println(person.toString());
3、反序列化为 List
可以看出,原始数据为一个array数组类型的
a:3:{i:0;s:6:"张三";i:1;s:6:"李四";i:2;s:6:"王五";}
反序列,返回一个AssocArray类型的对象
String serializeString = "a:3:{i:0;s:6:"张三";i:1;s:6:"李四";i:2;s:6:"王五";}";
Object unserialize = phpSerializer.unserialize(serializeString.getBytes("utf-8"));
AssocArray array = (AssocArray) unserialize;
List<Object> listResult = new ArrayList<Object>();
for (int i = 0; i < array.size(); i++) {
listResult.add(new String((byte[])array.get(i)));
}
System.out.println(listResult);
4、反序列化为 Map (与反序列化为对象同理)
a:3:{s:10:"cycle_time";i:2;s:4:"rate";s:5:"0.015";s:4:"date";s:15:"2019年1月1日";}
//HashMap hashmap = (HashMap)phpSerializer.unserialize(serializeString.getBytes("utf-8"),Map.class);
Object unserialize = phpSerializer.unserialize(serializeString.getBytes("utf-8"));
AssocArray array = (AssocArray) unserialize;
HashMap hashmap = array.toLinkedHashMap(); //转换为Map
Map<String,Object> map = new HashMap<String,Object>();
for (Object key : hashmap.keySet()) {
if(hashmap.get(key) instanceof Integer){
map.put((String)key,hashmap.get(key));
}
else {
map.put((String)key,new String((byte[]) hashmap.get(key)));
}
}
System.out.println(map);