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 序列化反序列化工具相关推荐

  1. Redis+protostuff 实现对象序列化保存,反序列化获取

    很多情况我们为了解决并发问题使用redis非关系型数据库保存数据,我们序列化保存方便数据的传输可以随时把对象持久化到数据库.文件等系统里,也方我们反序列化获取对象,下面我就开始整理吧 1.利用mave ...

  2. protostuff java_Protostuff一键序列化工具、Protobuf JAVA实现

    前言:由于搜集网络,发现Protostuff相关内容较少,故此发布这篇文章 1. 何为序列化 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象 ...

  3. Kryo,Hessain,Protostuff三种序列化方式对比

    前言 前段时间在写RPC框架的时候用到了Kryo.Hessian.Protostuff三种序列化方式.但是当时因为急于实现功能,就只是简单的的看了一下如何使用这三种序列化方式,并没有去深入研究各自的特 ...

  4. java protostuff 好处,java序列化Protostuff和Serializable的区别

    java序列化Protostuff和Serializable的区别 关注:146  答案:1  mip版 解决时间 2021-01-25 06:11 提问者你若离去丶巴掌扇去 2021-01-24 0 ...

  5. Java 序列化反序列化框架比较

    文章目录 一.简介 二.序列化框架 1.JDK 2.XML序列化 3.JSON序列化 4.Hessian 5.Avro序列化 6.Kyro序列化 7.Protostuff 三.序列化框架对比测试 1. ...

  6. Redis Template使用append方法不起作用的解决办法以及序列化/反序列化的解释

    今天使用Redis Template进行测试发现的问题, 遇到这个错 org.springframework.data.redis.serializer.SerializationException: ...

  7. 反序列化工具_JBOSS反序列化漏洞

    10月13日 简简单单的复现一个漏洞0x00 起因 因为当初说要把vulhub上面的漏洞都复现一遍,然后今天看内网的书又头疼,python也学不下去,打开vulhub,然后随便一滚鼠标滑轮,刚刚好遇见 ...

  8. 敏捷中gwt含义_在GWT中序列化/反序列化Json

    敏捷中gwt含义 JSON和GWT 最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践. 这篇文章旨在突出其重点. 到目前为止,在GWT中有三种将对象转换 ...

  9. 在GWT中序列化/反序列化Json

    JSON和GWT 最近, GWT用户小组中进行了有趣的讨论 ,涉及在客户端对JSON进行序列化/反序列化的最佳实践. 这篇文章旨在突出其重点. 到目前为止,在GWT中有三种将对象转换为JSON并从客户 ...

最新文章

  1. 一文读懂jar包的小秘密
  2. 我爸和在我们小区里的一位老大爷
  3. OpenCV用于人脸检测
  4. 10种常用排序算法实现
  5. html 弹出层插件,jQuery弹出层插件(原创)
  6. 【bzoj2521】[Shoi2010]最小生成树 网络流最小割
  7. 最小值c语言 循环,C语言循环结构 -C语言求全班同学身高的最大值和最小值
  8. 两个系统交互方式有几种_创新性OriginOS系统,打造个性化交互方式,很给力
  9. 将数据导入excel表格
  10. C#基础知识整理:基础知识(11) 值类型,引用类型
  11. 对于transform的新认识
  12. Java描述设计模式(01):单例模式
  13. 数学建模中的规划问题
  14. Nginx的集群以及负载均衡
  15. 简单快速获取思维导图
  16. ASP.Net Core数据加密
  17. MySQL进阶-02-多表设计
  18. TLC5615模数转换锯齿波仿真实验(Arduino)
  19. 暴力破解Wi-Fi密码(Mac M1)
  20. 计算机视觉研究院手把手教你深度学习的部署(手势识别,源码已开源)

热门文章

  1. 郁闷啊DirBuster
  2. MySQL服务器启动后自动停止
  3. Android录屏通过udp共享到其它手机
  4. Java调用 新浪微博API 接口发微博,逐条讲解,绝对清晰
  5. 【pyqt】QTimer的使用介绍以及简单用例
  6. 【求职英语】一些英语面试题整理【转】
  7. BugKu color
  8. Ansible执行流程
  9. HMM学习一:前向和后向算法
  10. 【转】ssa/ass字幕格式全解析