import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Base64;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.esotericsoftware.kryo.serializers.JavaSerializer;
/**
* Kryo序列化与反序列化操作
* <dependency>
* <groupId>com.esotericsoftware</groupId>
* <artifactId>kryo-shaded</artifactId>
* <version>4.0.0</version>
* </dependency>
*
* @author Hxm
*
*/
@SuppressWarnings({"all"})
public class KryoTest {
/**
* 序列化
* @param obj 待序列化对象
* @return base64字符串
*/
private <T extends Serializable> String serializationObject(T obj) {
Kryo kryo = new Kryo();
kryo.setReferences(false);
kryo.register(obj.getClass(), new JavaSerializer());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Output output = new Output(baos);
kryo.writeClassAndObject(output, obj);
output.flush();
output.close();
byte[] b = baos.toByteArray();
try {
baos.flush();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return Base64.getEncoder().encodeToString(b);
}
/**
* 反序列化
* @param objStr 进行反序列化的base64字符串
* @param clazz 反序列化目标类型
* @return 对象
*/
private <T extends Serializable> T deserializationObject(String objStr, Class<T> clazz) {
Kryo kryo = new Kryo();
kryo.setReferences(false);
kryo.register(clazz, new JavaSerializer());
ByteArrayInputStream bais = new ByteArrayInputStream(Base64.getDecoder().decode(objStr));
Input input = new Input(bais);
return (T) kryo.readClassAndObject(input);
}
}
Kryo基本使用
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。