import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.apache.commons.io.input.ClassLoaderObjectInputStream;
import com.pingan.cgi.common.util.LogUtil;
/**
* 对象序列化工具类
*
*/
public final class ObjectSerializer {
/**
* 将对象序列化为二进制数组
* @param object 待序列化对象
* @return
* @throws Exception
*/
public static byte[] serialize(Object object) throws Exception {
LogUtil.trace("ObjectSerializer serialize start...");
if (object == null) {
return null;
}
ObjectOutputStream o = null;
ByteArrayOutputStream b = new ByteArrayOutputStream();
try {
o = new ObjectOutputStream(b);
o.writeObject(object);
o.flush();
byte[] bytes = b.toByteArray();
return bytes;
} catch (Exception e) {
throw e;
} finally {
if (o != null) {
o.close();
}
}
}
/**
* 将序列化后的二进制数组反序列化为对象
* @param bytes 待反序列化二进制数组
* @return
* @throws Exception
*/
public static Object deserialize(byte[] bytes) throws Exception {
LogUtil.trace("ObjectSerializer deserialize start...");
ClassLoader cl = getDefaultClassLoader();
if (bytes == null) {
return null;
}
ObjectInputStream in = new ClassLoaderObjectInputStream(cl,
new ByteArrayInputStream(bytes));
try {
return in.readObject();
} finally {
in.close();
}
}
private static ClassLoader getDefaultClassLoader() {
LogUtil.trace("ObjectSerializer getDefaultClassLoader start...");
ClassLoader cl = Thread.currentThread().getContextClassLoader();
if (cl == null) {
cl = ObjectSerializer.class.getClassLoader();
}
return cl;
}
}