protostuff java_java protostuff 序列化反序列化工具
packagecom.common.utils;importio.protostuff.LinkedBuffer;importio.protostuff.ProtostuffIOUtil;importio.protostuff.Schema;importio.protostuff.runtime.RuntimeSchema;/***
* @desc protobuf序列化反序列化工具
*@authorwulm*/
public classProtostuffUtil{/*** @desc protostuff 目前不支持直接序列化List等对象,需要使用普通的POJO包装一下
*@authorwulm*/
private static classSerializeData {privateObject target;publicObject getTarget() {returntarget;
}public voidsetTarget(Object target) {this.target =target;
}
}private static final ThreadLocal BUFFER_THREAD_LOCAL =ThreadLocal
.withInitial(()-> LinkedBuffer.allocate(512));/*** @desc 序列化
* @auth wulm*/@SuppressWarnings("unchecked")public static byte[] serialize(Object obj) {
SerializeData data= newSerializeData();
data.setTarget(obj);//this is lazily created and cached by RuntimeSchema//so its safe to call RuntimeSchema.getSchema(Foo.class) over and over//The getSchema method is also thread-safe
Schema schema = RuntimeSchema.getSchema((Class) data.getClass());//Re-use (manage) this buffer to avoid allocating on every serialization//LinkedBuffer buffer = LinkedBuffer.allocate(512);
LinkedBuffer buffer =BUFFER_THREAD_LOCAL.get();//ser
try{returnProtostuffIOUtil.toByteArray(data, schema, buffer);
}catch(Exception e) {throw newIllegalStateException(e.getMessage(), e);
}finally{
buffer.clear();
}
}/***
* @desc 反序列化
* @auth wulm*/@SuppressWarnings("unchecked")public static T deserialize(byte[] data, Classcls) {
Schema schema = RuntimeSchema.getSchema(SerializeData.class);//deser
SerializeData message =schema.newMessage();
ProtostuffIOUtil.mergeFrom(data, message, schema);return(T) message.getTarget();
}//public static class Aaa {//
//public static void main(String[] args) {//
//Aaa aaa = new Aaa();//aaa.setA("你好呀");//aaa.setB("我是佩琪");//aaa.setC("你好");//aaa.setD("我是猪爸爸");//
//List list = new ArrayList<>();//list.add(aaa);//
//byte[] serialize = ProtostuffUtil.serialize(list);//
//List bb = ProtostuffUtil.deserialize(serialize,//List.class);//
//System.out.println(JacksonUtils.writeValueAsString(bb));//
//}//
//private String a;//private String b;//private String c;//private String d;//
//public String getA() {//return a;//}//
//public void setA(String a) {//this.a = a;//}//
//public String getB() {//return b;//}//
//public void setB(String b) {//this.b = b;//}//
//public String getC() {//return c;//}//
//public void setC(String c) {//this.c = c;//}//
//public String getD() {//return d;//}//
//public void setD(String d) {//this.d = d;//}//
//}
}
protostuff java_java protostuff 序列化反序列化工具相关推荐
- Redis+protostuff 实现对象序列化保存,反序列化获取
很多情况我们为了解决并发问题使用redis非关系型数据库保存数据,我们序列化保存方便数据的传输可以随时把对象持久化到数据库.文件等系统里,也方我们反序列化获取对象,下面我就开始整理吧 1.利用mave ...
- protostuff java_Protostuff一键序列化工具、Protobuf JAVA实现
前言:由于搜集网络,发现Protostuff相关内容较少,故此发布这篇文章 1. 何为序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象 ...
- Kryo,Hessain,Protostuff三种序列化方式对比
前言 前段时间在写RPC框架的时候用到了Kryo.Hessian.Protostuff三种序列化方式.但是当时因为急于实现功能,就只是简单的的看了一下如何使用这三种序列化方式,并没有去深入研究各自的特 ...
- java protostuff 好处,java序列化Protostuff和Serializable的区别
java序列化Protostuff和Serializable的区别 关注:146 答案:1 mip版 解决时间 2021-01-25 06:11 提问者你若离去丶巴掌扇去 2021-01-24 0 ...
- Java 序列化反序列化框架比较
文章目录 一.简介 二.序列化框架 1.JDK 2.XML序列化 3.JSON序列化 4.Hessian 5.Avro序列化 6.Kyro序列化 7.Protostuff 三.序列化框架对比测试 1. ...
- Redis Template使用append方法不起作用的解决办法以及序列化/反序列化的解释
今天使用Redis Template进行测试发现的问题, 遇到这个错 org.springframework.data.redis.serializer.SerializationException: ...
- 反序列化工具_JBOSS反序列化漏洞
10月13日 简简单单的复现一个漏洞0x00 起因 因为当初说要把vulhub上面的漏洞都复现一遍,然后今天看内网的书又头疼,python也学不下去,打开vulhub,然后随便一滚鼠标滑轮,刚刚好遇见 ...
- 敏捷中gwt含义_在GWT中序列化/反序列化Json
敏捷中gwt含义 JSON和GWT 最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践. 这篇文章旨在突出其重点. 到目前为止,在GWT中有三种将对象转换 ...
- 在GWT中序列化/反序列化Json
JSON和GWT 最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践. 这篇文章旨在突出其重点. 到目前为止,在GWT中有三种将对象转换为JSON并从客户 ...
最新文章
- 一文读懂jar包的小秘密
- 我爸和在我们小区里的一位老大爷
- OpenCV用于人脸检测
- 10种常用排序算法实现
- html 弹出层插件,jQuery弹出层插件(原创)
- 【bzoj2521】[Shoi2010]最小生成树 网络流最小割
- 最小值c语言 循环,C语言循环结构
-C语言求全班同学身高的最大值和最小值
- 两个系统交互方式有几种_创新性OriginOS系统,打造个性化交互方式,很给力
- 将数据导入excel表格
- C#基础知识整理:基础知识(11) 值类型,引用类型
- 对于transform的新认识
- Java描述设计模式(01):单例模式
- 数学建模中的规划问题
- Nginx的集群以及负载均衡
- 简单快速获取思维导图
- ASP.Net Core数据加密
- MySQL进阶-02-多表设计
- TLC5615模数转换锯齿波仿真实验(Arduino)
- 暴力破解Wi-Fi密码(Mac M1)
- 计算机视觉研究院手把手教你深度学习的部署(手势识别,源码已开源)