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. 常用数据增广方法,解决数据单一问题
  2. Jquery中替换节点的方法replaceWith()和replaceAll()
  3. CRM系统-----学员管理系统---admin自定义开发3
  4. php数据库的值嵌入input_求助:问个关于用INPUT提取数据库里的值然后修改的问题。...
  5. RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
  6. 8. jQuery 效果 - 动画
  7. 处理器管理与进程调度
  8. android夸项目调用
  9. 《推荐系统实践》(一)好的推荐系统
  10. LaTex下载 、安装以及使用
  11. Vue项目使用SSR服务器渲染
  12. java端口扫描器_简单端口扫描器java的设计与实现.doc
  13. 维度诅咒_维度的诅咒减去行话的诅咒
  14. OBS 基础 13 OBS设置项 热键页面梳理
  15. macbook视频格式转换_为了找到MacBook这个视频转换软件我哭了!太强大了!
  16. 类拼多多砍价业务总结
  17. 使用组策略将用户文件夹重定向到D盘
  18. Databricks文档04----使用 Azure Databricks 提取、转换和加载数据
  19. C#结合天敏VC4000采集卡视频监控
  20. 网站备案靠谱吗_域名快速备案靠谱吗

热门文章

  1. L1-018. 大笨钟-PAT团体程序设计天梯赛GPLT
  2. L1-020. 帅到没朋友-PAT团体程序设计天梯赛GPLT
  3. Oracle表删除大量数据后查询变慢问题
  4. 虚拟机使用ceph-deploy安装ceph
  5. NYOJ-57 6174问题
  6. MYCAT 安装(转)
  7. Citrix XenDesktop 虚拟桌面 每用户/设备 许可手动释放
  8. Javascript中的条件语句和循环语句
  9. 学习zookeeper基础知识
  10. 对JSP和Servlet的理解