java protostuff 序列化反序列化工具
protostuff是由谷歌开发的一个非常优秀的序列化反序列化工具
maven导入包:
<dependency>
<groupId>io.protostuff</groupId>
<artifactId>protostuff-runtime</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>io.protostuff</groupId>
<artifactId>protostuff-core</artifactId>
<version>1.6.0</version>
</dependency>
java代码如下:
package com.common.utils; import io.protostuff.LinkedBuffer;
import io.protostuff.ProtostuffIOUtil;
import io.protostuff.Schema;
import io.protostuff.runtime.RuntimeSchema; /**
*
* @desc protobuf序列化反序列化工具
* @author wulm
*/
public class ProtostuffUtil{ /**
* @desc protostuff 目前不支持直接序列化List等对象,需要使用普通的POJO包装一下
* @author wulm
*/
private static class SerializeData {
private Object target; public Object getTarget() {
return target;
} public void setTarget(Object target) {
this.target = target;
}
} private static final ThreadLocal<LinkedBuffer> BUFFER_THREAD_LOCAL = ThreadLocal
.withInitial(() -> LinkedBuffer.allocate(512)); /**
* @desc 序列化
* @auth wulm
*/
@SuppressWarnings("unchecked")
public static byte[] serialize(Object obj) {
SerializeData data = new SerializeData();
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<SerializeData> schema = RuntimeSchema.getSchema((Class<SerializeData>) 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 {
return ProtostuffIOUtil.toByteArray(data, schema, buffer);
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
} finally {
buffer.clear();
} } /**
*
* @desc 反序列化
* @auth wulm
*/
@SuppressWarnings("unchecked")
public static <T> T deserialize(byte[] data, Class<T> cls) {
Schema<SerializeData> 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<Aaa> list = new ArrayList<>();
// list.add(aaa);
//
// byte[] serialize = ProtostuffUtil.serialize(list);
//
// List<Aaa> 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;
// }
//
// }
}
参阅资料:
https://github.com/protostuff/protostuff
http://www.zhangleiup.com/post/112.htm
http://www.cnblogs.com/wolf-bin/p/9269987.html
java protostuff 序列化反序列化工具的更多相关文章
- Java对象序列化/反序列化的注意事项(转)
Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久 ...
- Java对象序列化/反序列化的注意事项
Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中.JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了.而在很多情况下,对象内部状态是需要被持久 ...
- java基础 序列化反序列化流 实现Serializable 接口 自动装载序列号到对象文本文件如修改不能反序列化对象文本,除非自定义long型常量 打印流
package com.swift.baseKnowledge; import java.io.File; import java.io.FileInputStream; import java.io ...
- c#序列化反序列化工具(json,binary,xml)
using System; using System.Text; using System.IO; using System.Runtime.Serialization.Formatters.Bina ...
- java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子
目录 背景 测试 环境 工具 说明 结果 结论 xstream简单教程 准备 代码 protobuf简单教程 快速入门 下载.exe编译器 编写.proto文件 利用编译器编译.proto文件生成ja ...
- Java对象序列化和反序列化的工具方法
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Protostuff序列化和反序列化
序列化和反序列化是在应对网络编程最常遇到的问题之一. 序列化就是将Java Object转成byte[]:反序列化就是将byte[]转成Java Object. 这里不介绍JDK serializab ...
- java之序列化与反序列化
1.这里主要是介绍Protobuf提供的序列化与反序列化的高效性.相对于传统的java提供的序列化来说,Protobuf的效率提高了很多倍.但是也有不足的地方,就是proto在对象序列化的时候抛弃了很 ...
- SerializeUtil 序列化,反序列化工具类
package cloud.app.prod.home.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...
随机推荐
- P2P网贷中的4种理財业务模式
线上3种 直投标:线上理財人直接购买借款人的标.平台仅仅是起个"撮合"作用.收点借款人的服务费. 借款人不还钱,有的平台会帮"借款人" ...
- 仰视源代码,实现strcmp
//这是系统库的实现 int strcmp(const char* src, const char* dest) { int rtn = 0; while(!(rtn = *(unsigned cha ...
- 修改版Putty,可保持密码
修改版Putty,可保持密码: http://files.cnblogs.com/findumars/putty_v6.0.rar 转自: http://unmi.cc/putty-auto-logi ...
- 2018GDKOI游记
我很后悔DAY1考完就写了小结.没人看题解,却这么多人来揭我伤疤.既然明摆着摆出来就是刷访问量,下面的就别看了吧. --------------------分割线------------------- ...
- Bing必应地图中国API - 在地图上画圆
Bing必应地图中国API - 在地图上画圆 2011-05-24 14:49:37| 分类: Bing&Google|字号 订阅 <变形金刚2>上映4日国内票房过亿,基 ...
- JSP-Runoob:JSP开发环境搭建
ylbtech-JSP-Runoob:JSP开发环境搭建 1.返回顶部 1. JSP 开发环境搭建 JSP开发环境是您用来开发.测试和运行JSP程序的地方. 本节将会带您搭建JSP开发环境,具体包括以 ...
- 如何截取iframe的内容,修改他的CSS
function setv(){ $("#innerContent").contents().find(".listTable-01").cs ...
- React实战之60s倒计时按钮(发送短信验证按钮)
React实战之60s倒计时按钮——短信验证按钮 导入:(antd组件——Form表单) import { Button, Form, Input } from 'antd'; const FormI ...
- 在Chrome与火狐中,输入框input类型为number时,如何去除掉的自带的上下默认箭头
如何移除input='number'时浏览器自带的上下箭头: CSS样式: /* 去除input[type=number]浏览器默认的icon显示 */ input::-webkit-outer-sp ...
- Maven之项目搭建与第一个helloworld(多图)
这次记录第一个搭建一个maven的helloworld的过程. 转载 1.搭建web工程肯定得new 一个 maven工程,假如project中没有直接看到maven工程,那么选择Other,然后在W ...