首页 > 编程语言 >java中把对象序列化成php序列化的字符串以及把php序列化的字符串反序列化为java对象的方法

java中把对象序列化成php序列化的字符串以及把php序列化的字符串反序列化为java对象的方法

时间:2023-05-19 16:34:45浏览次数:36  
标签:AssocArray Object java rtn List 序列化 php

依赖第三方库 phprpc

序列化成php格式的字符串很简单,直接调用 org.phprpc.util.PHPSerializer.serializer方法就行,有问题的是反序列化php格式的字符串为List或Map对象时,得到的是个

AssocArray对象,需要写方法进行转换。通过下面这个方法可以实现转为java对象。
  public static Object phpUnserialize(String s) {
        Object rtn = null;
        try {
            AssocArray aa = (AssocArray) ps.unserialize(s.getBytes(CharEncoding.UTF_8));
            rtn = transfer(aa);
        }catch (Exception e){
            e.printStackTrace();
        }
        return rtn;
    }
    private static Object transfer(Object o){
        Object rtn = null;
        if(o instanceof AssocArray) {
            AssocArray aa = (AssocArray) o;
            List l  = aa.toArrayList();
            if(l==null || l.size()==0){
                Map m = aa.toHashMap();
                rtn = transfer(m);
            }else{
                rtn = transfer(l);
            }
        }else if(o instanceof Map){
            Map m = (Map<?, ?>) o;
            for(Object key:m.keySet()){
                Object v = m.get(key);
                if(v instanceof AssocArray){
                    v = transfer(v);
                    m.put(key,v);
                } else if (v instanceof byte[]) {
                    m.put(key,new String(((byte[])v)));
                }
            }
            rtn = m;
        } else if (o instanceof List) {
            List l = (List) o;
            List newL = new ArrayList();
            for(int i=0;i<l.size();i++){
                Object o1 = l.get(i);
                o1 = transfer(o1);
                newL.add(o1);
            }
            rtn = newL;
        } else if(o instanceof byte[]){
            rtn = new String(((byte[])o));
        }else {
            rtn = o;
        }
        return rtn;
    }

 

标签:AssocArray,Object,java,rtn,List,序列化,php
From: https://www.cnblogs.com/zahngkai/p/17415561.html

相关文章

  • uni.request(OBJECT)前端post请求数据json序列化
    一、uni-app前端post请求数据json序列化1.前置须知Content-Type实体头部用于指示资源的MIME(媒体)类型mediatype。在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。在请求中,客户端告诉服务器实际发送的数据类型。2.uni.request({})官方文档2.1dat......
  • Java Semaphore 信号量详解
    Semaphore基本使用场景Semaphore的基本使用场景是限制一定数量的线程能够去执行.举个简单的例子:一个单向隧道能同时容纳10个小汽车或5个卡车通过(1个卡车等效与2个小汽车),而隧道入口记录着当前已经在隧道内的汽车等效比重.比如1个小汽车和1个卡车,则隧道入口显示3.若隧道......
  • JAVA学习之常用类
    首先是八大Wrapper类Wrapper类包装类:1.针对八种基本数据类型相应的引用类型-包装类。2.有了类的特点,就可以调用类的方法了。除了char->Character和int->Integer,其他的包装类都是再基本数据类型的基础上把首字母大写得到的。包装类和基本数据类型的转换jdk5之后就实现了自......
  • JavaScript split() 方法
    定义和用法:split()方法用于把一个字符串分割成字符串数组。stringObject.split(separator,howmany)其中:separator必需。字符串或正则表达式,从该参数指定的地方分割stringObject。howmany可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指......
  • php第三方库:用simple_html_dom解析html(php)
    一,第三方库的地址:https://github.com/voku/simple_html_dom二,安装库:simple_html_dom:1,安装[lhdop@blogparsehtml]$composerrequirevoku/simple_html_domInfofromhttps://repo.packagist.org:#StandWithUkraine…2,安装完成后查看安装成功的文件:[lhdop@blog......
  • javaweb
    一、html和css二、JavaScript三、Jquery(jquery+jquery动画)四、xml五、tomcat&servlet六、jsp七、el表达式(包含jstl标签库)八、文件上传和下载九、Cookie(包含Session)十、Filter十一、Json、ajax、i18十二、axios......
  • JavaScript
    二、JavaScript1、JavaScript介绍JavaScript语言诞生主要是完成页面的数据验证。因此它运行在客户端,需要运行浏览器来解析执行JavaScript代码。JS是Netscape网景公司的产品,最早取名为LiveScript;为了吸引更多java程序员,更名为JavaScript。JS是弱类型,Java是强类型。弱类型就是类......
  • Java 枚举
     Java5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的bug。例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。实例classFreshJuice{enumFreshJuiceSize{SMALL,MEDIUM,LAR......
  • Java 对象和类
     Java作为一种面向对象语言。支持以下基本概念:多态继承封装抽象类对象实例方法重载本节我们重点研究对象和类的概念。对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一......
  • Java中的对象
    Java中的对象 现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。对比现实对象和软件对象,它们之间十分相似。软件对象也有状态和行为。......