java反序列化 (PHPSerializer 序列化的对象)

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);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值