php的serialize/unserialize,方便把一个数组序列化和反序列化,但是要和java交互,就比较麻烦了。
java的serialize,序列化之后,会把java.util…包名都放进去了,而且格式也不同于php
对于汉字 php 占用2个字符,java占用一个字符,隐藏php序列化后,再由java 反序列化,可能导致乱码。
PHPSerializer 工具类可解决以上问题
目前版本目前实现了对各种基本类型、数组、ArrayList、HashMap、和其它可序列化对象的序列化。实现了 PHP 5 中的 Serializable 接口的支持。实现了 PHP 中的 __sleep 和 __wakeup 魔术方法的支持。实现了对所有标示(N、b、i、d、s、a、O、R、r、U、C)的反序列化,在对标示 a 反序列化时,可以根据下标和值来自动判断是 ArrayList 还是 HashMap。并且在反序列化时可以强制指定反序列化的类型。
该类是静态类,无需也不能被实例化。除了包含了 serialize 和 unserialize 方法以外,还增加了一个 cast 方法,用来进行反序列化后的类型转换,该方法主要用于将反序列化后的 ArrayList 转化为数组或者 HashMap。
该类在 J2SE SDK 1.3.1 和更高版本上编译通过,更低版本的未做测试。
package org.phprpc.util;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map map= new HashMap();
map.put("title", "这是标题1");
map.put("title2", "这是标题2");
map.put("title3", "这是标题3");
map.put("title4", "这是标题4");
byte[] b =PHPSerializer.serialize(map);
System.out.println(new String(b));
String str="a:4:{s:8:"fileName";s:53:"api_app/upload_Images/201211/22/1353546060_3801_1.png";s:8:"pic_size";i:155997;s:5:"width";i:480;s:6:"height";i:240;}";
try {
Map map2 =(Map)PHPSerializer.unserialize(str.getBytes()); //这是返回的map类型,用于处理以为数组
//ArrayList array = new ArrayList();
//array = (ArrayList) PHPSerializer.unserialize(str.getBytes());//这是返回的ArrayList类型,用于处理多维数组
//在Idea中,str.getBytes(“utf-8”),需要带上utf-8,否则导致汉字乱码,因为不同编码,汉字的字符长度是不一样的,就可能导致解析错误。
for (String s : map2.keySet()) {
System.out.println("key:"+s+" value:"+map2.get(s));
}
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
说明一下,PHPSerializer.unserialize会根据序列化的实际内容,转换数据类型,所以上面的数据中有数字的,就被转换了。所以用Object比较保险。
package org.phprpc.util;
/* Serializable.java
*
* Author: Ma Bingyao
* Copyright: CoolCode.CN
* Version: 2.1
* LastModified: 2006-08-09
* This library is free. You can redistribute it and/or modify it.
* http://www.coolcode.cn/?p=202
* http://www.coolcode.org/?action=show&id=202
*/
interface Serializable {
byte[] serialize();
void unserialize(byte[] ss);
}
这个工具类需要phprpc jar包支持,maven导入包:
org.sction
phprpc
3.0.2
转载地址:https://www.cjblog.org/blog/1356591438758