All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.util.SerializeUtil Maven / Gradle / Ivy

There is a newer version: 5.8.33
Show newest version
package cn.hutool.core.util;

import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.ValidateObjectInputStream;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.Serializable;

/**
 * 序列化工具类
* 注意!此工具类依赖于JDK的序列化机制,某些版本的JDK中可能存在远程注入漏洞。 * * @author looly * @since 5.6.3 */ public class SerializeUtil { /** * 序列化后拷贝流的方式克隆
* 对象必须实现Serializable接口 * * @param 对象类型 * @param obj 被克隆对象 * @return 克隆后的对象 * @throws UtilException IO异常和ClassNotFoundException封装 */ public static T clone(T obj) { if (false == (obj instanceof Serializable)) { return null; } return deserialize(serialize(obj)); } /** * 序列化
* 对象必须实现Serializable接口 * * @param 对象类型 * @param obj 要被序列化的对象 * @return 序列化后的字节码 */ public static byte[] serialize(T obj) { if (false == (obj instanceof Serializable)) { return null; } final FastByteArrayOutputStream byteOut = new FastByteArrayOutputStream(); IoUtil.writeObjects(byteOut, false, (Serializable) obj); return byteOut.toByteArray(); } /** * 反序列化
* 对象必须实现Serializable接口 * *

* 注意!!! 此方法不会检查反序列化安全,可能存在反序列化漏洞风险!!! *

* * @param 对象类型 * @param bytes 反序列化的字节码 * @param acceptClasses 白名单的类 * @return 反序列化后的对象 */ public static T deserialize(byte[] bytes, Class... acceptClasses) { try { return IoUtil.readObj(new ValidateObjectInputStream( new ByteArrayInputStream(bytes), acceptClasses)); } catch (IOException e) { throw new IORuntimeException(e); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy