java序列化(六) - protostuff序列化
2019独角兽企业重金招聘Python工程师标准>>>
添加依赖
<dependency><groupId>io.protostuff</groupId><artifactId>protostuff-core</artifactId><version>1.5.9</version></dependency><dependency><groupId>io.protostuff</groupId><artifactId>protostuff-runtime</artifactId><version>1.5.9</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>
编写序列化工具类
package meng.springboot.demo.obj;import io.protostuff.LinkedBuffer;
import io.protostuff.ProtostuffIOUtil;
import io.protostuff.Schema;
import io.protostuff.runtime.RuntimeSchema;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** XXX** @author mengzhang6* @date 2018/10/22 19:18*/
public class ProtostuffUtils {private static Map<Class<?>, Schema<?>> cachedSchema = new ConcurrentHashMap<>();private static <T> Schema<T> getSchema(Class<T> cls) {Schema<T> schema = (Schema<T>) cachedSchema.get(cls);if (schema == null) {schema = RuntimeSchema.createFrom(cls);if (schema != null) {cachedSchema.put(cls, schema);}}return schema;}/*** 序列化** @param obj* @param <T>* @return*/public static <T> byte[] serialize(T obj) {Class<T> cls = (Class<T>) obj.getClass();LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);try {Schema<T> schema = getSchema(cls);return ProtostuffIOUtil.toByteArray(obj, schema, buffer);} catch (Exception e) {throw new IllegalStateException(e.getMessage(), e);} finally {buffer.clear();}}/*** 反序列化** @param data* @param cls* @param <T>* @return*/public static <T> T deserialize(byte[] data, Class<T> cls) {try {Schema<T> schema = getSchema(cls);T message = schema.newMessage();ProtostuffIOUtil.mergeFrom(data, message, schema);return message;} catch (Exception e) {throw new IllegalStateException(e.getMessage(), e);}}}
实体类
package meng.springboot.demo.obj;import java.util.Date;/*** XXX** @author mengzhang6* @date 2018/10/22 19:36*/
public class User4 {private int id;private String name;private Date addDate;/*** 使用transient表示,不参与序列化*/private transient String no;/*** 声明为static和transient类型的成员数据不能被序列化* 因为static代表类的状态,transient代表对象的临时数据。*/public static String staNo;/*** Archive也需要实现Serializable*/private Archive archive;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getAddDate() {return addDate;}public void setAddDate(Date addDate) {this.addDate = addDate;}public String getNo() {return no;}public void setNo(String no) {this.no = no;}public Archive getArchive() {return archive;}public void setArchive(Archive archive) {this.archive = archive;}@Overridepublic String toString() {return "User4{" +"id=" + id +", name='" + name + '\'' +", addDate=" + addDate +", no='" + no + '\'' +", archive=" + archive +'}';}
}
单元测试
@Testpublic void writeObject4() throws IOException {User4 user = new User4();user.setId(1004);user.setName("晨猫");user.setAddDate(Calendar.getInstance().getTime());user.setNo("Xs01");user.setArchive(new Archive("Mc001", "Hangzhou", "18366557620"));System.out.println(user);byte[] data = ProtostuffUtils.serialize(user);FileUtils.writeByteArrayToFile(new File("User4.out"), data);}@Testpublic void readObject4() throws IOException, ClassNotFoundException {User4 user = ProtostuffUtils.deserialize(FileUtils.readFileToByteArray(new File("User4.out")), User4.class);System.out.println(user);}
转载于:https://my.oschina.net/mengzhang6/blog/2250880
java序列化(六) - protostuff序列化相关推荐
- Java kryo/protobuf/protostuff序列化 or Json 性能对比
Java kryo/protobuf/protostuff序列化 or Json 性能对比 - 腾飞的鹰 - 博客园 对于一个java object的序列化,想测一下使用json和使用一般序列化工具, ...
- java序列化工具 protoStuff的使用
1.前言 在互联网快速发展的今天,互联网架构也在不断的升级.而数据的传输和存贮是互联网系统中不可或缺的一部分.举个简单的例子,目前微服务已经很普及了,就拿dubbo来说,不管用jdk自带的序列化,还是 ...
- Java序列化机制——protoStuff
Java的序列化是在文件传输中必不可少的一部分.常用的Java序列化机制有Java默认的序列化机制,谷歌的protobuf等.而Java默认的序列化机制效率太低,protobuf要写protostuf ...
- java Serializable和Externalizable序列化反序列化详解--转
一.什么是序列化? "对象序列化"(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字 ...
- netty之Protostuff序列化协议
Protostuff序列化详解 前言 依赖 定义编解码器 工具类 编码器 解码器 整合到netty 注意事项 前言 比起上文的Protobuf协议,Protostuff的好处就是不用去编辑proto文 ...
- java string 反序列化_java序列化和反序列化
引语: 平时我们在运行程序的时候,创建的对象都在内存中,当程序停止或者中断了,对象也就不复存在了.如果我们能将对象保存起来,在需要使用它的时候在拿出来使用就好了,并且对象的信息要和我们保存 时的信息一 ...
- [Java] 序列化(Serialization)的本质是什么?在Java中怎么实现?为什么要了解序列化技术?序列化技术选型要点是什么?
文章目录 前言 序列化是什么? 理解对象在内存中是如何存储的 数据在进程内存中的分布图 数据被序列化之后在内存中的分布图 序列化/反序列化的本质? 序列化在Java中的实现? 1. JDK Seria ...
- Protostuff序列化分析
最近项目中需要将业务对象直接序列化,然后存数据库:考虑到序列化.反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文件, ...
- protostuff序列化
在java中,序列化是经常需要使用的,比如对象在网络中传输,那么就必须要序列化后进行传输.而java自带的序列化使用起来虽然方便,但是它序列化后占的体积大,而且不能跨语言,因此在涉及到序列化的时候必然 ...
- 自定义kafka高效的protoStuff序列化
目前序列化领域中,谷歌的 protobuf 应该是性能好,效率高的了,并且 protobuf 支持多种语言,可跨平台,跨语言 但使用起来并不像其他序列化那么简单(首先要写.proto文件,然后编译.p ...
最新文章
- 为计算机系的学生建立视图,数据库及其应用2010年1月真题
- python 3 廖雪峰博客笔记(三) 命令行模式与交互模式
- 模拟分发扑克牌(python实现)
- RBAC模型:表设计分析
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ajax请求 apend,jsp如何获取ajax append的数据?
- 从零开始学视觉Transformer (8):卷积和Transformer结合的ViT
- 计算机中2的四次方为啥是4位,计算机基础试题2(4页)-原创力文档
- 如何进行可视化大屏视觉设计?
- 顺序结构(C语言基本结构)
- 案例:模拟京东快递单号查询 字体放大显示
- matlab plotyy legend,Matlab如何在plotyy中设置legend可以显示四条不同的曲线描述
- mysql count判断_【MySQL】COUNT
- redis 学习曲线及记录笔记
- 物业系统信息转U8凭证
- 设计模式:(中介者模式)
- 石油场站三维可视化_三维bim建模_吉优赛维数字孪生可视化平台
- Altium designer中蛇形线走法和操作说明
- python ez setup.py_python 安装 ez_setup.py出现的问题及解决办法
- 2012暑期川西旅游之第八天(青城山-成都)
热门文章
- L2-027 名人堂与代金券-PAT团体程序设计天梯赛GPLT
- 蓝桥杯 ADV-72 算法提高 一元一次方程
- 计算机信息管理是学什么课程设计,毕业论文计算机专业学生信息管理系统(数据库课程设计)...
- 理解 Nginx HTTP 代理, 负载均衡, Buffering, Caching
- dhcp网络服务的搭建和配置
- Android线程和线程Handler基础一览
- 云服务器 ECS 搭建WordPress网站:购买 Linux 实例
- 我的软件测试之旅:(10)贡献——开发项流程
- canvas操作图片,进行面板画图,旋转等
- SHELL 003 -- ss命令常用方法