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

  1. Java kryo/protobuf/protostuff序列化 or Json 性能对比

    Java kryo/protobuf/protostuff序列化 or Json 性能对比 - 腾飞的鹰 - 博客园 对于一个java object的序列化,想测一下使用json和使用一般序列化工具, ...

  2. java序列化工具 protoStuff的使用

    1.前言 在互联网快速发展的今天,互联网架构也在不断的升级.而数据的传输和存贮是互联网系统中不可或缺的一部分.举个简单的例子,目前微服务已经很普及了,就拿dubbo来说,不管用jdk自带的序列化,还是 ...

  3. Java序列化机制——protoStuff

    Java的序列化是在文件传输中必不可少的一部分.常用的Java序列化机制有Java默认的序列化机制,谷歌的protobuf等.而Java默认的序列化机制效率太低,protobuf要写protostuf ...

  4. java Serializable和Externalizable序列化反序列化详解--转

    一.什么是序列化?   "对象序列化"(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字 ...

  5. netty之Protostuff序列化协议

    Protostuff序列化详解 前言 依赖 定义编解码器 工具类 编码器 解码器 整合到netty 注意事项 前言 比起上文的Protobuf协议,Protostuff的好处就是不用去编辑proto文 ...

  6. java string 反序列化_java序列化和反序列化

    引语: 平时我们在运行程序的时候,创建的对象都在内存中,当程序停止或者中断了,对象也就不复存在了.如果我们能将对象保存起来,在需要使用它的时候在拿出来使用就好了,并且对象的信息要和我们保存 时的信息一 ...

  7. [Java] 序列化(Serialization)的本质是什么?在Java中怎么实现?为什么要了解序列化技术?序列化技术选型要点是什么?

    文章目录 前言 序列化是什么? 理解对象在内存中是如何存储的 数据在进程内存中的分布图 数据被序列化之后在内存中的分布图 序列化/反序列化的本质? 序列化在Java中的实现? 1. JDK Seria ...

  8. Protostuff序列化分析

    最近项目中需要将业务对象直接序列化,然后存数据库:考虑到序列化.反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文件, ...

  9. protostuff序列化

    在java中,序列化是经常需要使用的,比如对象在网络中传输,那么就必须要序列化后进行传输.而java自带的序列化使用起来虽然方便,但是它序列化后占的体积大,而且不能跨语言,因此在涉及到序列化的时候必然 ...

  10. 自定义kafka高效的protoStuff序列化

    目前序列化领域中,谷歌的 protobuf 应该是性能好,效率高的了,并且 protobuf 支持多种语言,可跨平台,跨语言 但使用起来并不像其他序列化那么简单(首先要写.proto文件,然后编译.p ...

最新文章

  1. 为计算机系的学生建立视图,数据库及其应用2010年1月真题
  2. python 3 廖雪峰博客笔记(三) 命令行模式与交互模式
  3. 模拟分发扑克牌(python实现)
  4. RBAC模型:表设计分析
  5. ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
  6. ajax请求 apend,jsp如何获取ajax append的数据?
  7. 从零开始学视觉Transformer (8):卷积和Transformer结合的ViT
  8. 计算机中2的四次方为啥是4位,计算机基础试题2(4页)-原创力文档
  9. 如何进行可视化大屏视觉设计?
  10. 顺序结构(C语言基本结构)
  11. 案例:模拟京东快递单号查询 字体放大显示
  12. matlab plotyy legend,Matlab如何在plotyy中设置legend可以显示四条不同的曲线描述
  13. mysql count判断_【MySQL】COUNT
  14. redis 学习曲线及记录笔记
  15. 物业系统信息转U8凭证
  16. 设计模式:(中介者模式)
  17. 石油场站三维可视化_三维bim建模_吉优赛维数字孪生可视化平台
  18. Altium designer中蛇形线走法和操作说明
  19. python ez setup.py_python 安装 ez_setup.py出现的问题及解决办法
  20. 2012暑期川西旅游之第八天(青城山-成都)

热门文章

  1. L2-027 名人堂与代金券-PAT团体程序设计天梯赛GPLT
  2. 蓝桥杯 ADV-72 算法提高 一元一次方程
  3. 计算机信息管理是学什么课程设计,毕业论文计算机专业学生信息管理系统(数据库课程设计)...
  4. 理解 Nginx HTTP 代理, 负载均衡, Buffering, Caching
  5. dhcp网络服务的搭建和配置
  6. Android线程和线程Handler基础一览
  7. 云服务器 ECS 搭建WordPress网站:购买 Linux 实例
  8. 我的软件测试之旅:(10)贡献——开发项流程
  9. canvas操作图片,进行面板画图,旋转等
  10. SHELL 003 -- ss命令常用方法