proto开发神器——Jprotobuf(小白篇)
前言:
最近对一个项目做升级,内部有大对象需要存储到缓存上去,考虑到存储资源和性能问题,我们决定对生成的对象进行压缩,首先想到的是gzip压
缩,但是架构开始的时候,同事张某提议使用Google 的proto,发了几个文档看了一下,上手有点懵,这玩意的使用比对象转json压缩可复杂太多了,让人
有点恶心:于是乎,同事张某又发了一个插件(百度开发的),据说这个插件比原来使用简单的多,这是接入文档:https://segmentfault.com/a
/1190000039200121,但是,我看了一会,我认为这个接入文档写的一点也不简单,写得挺全乎但是文章结构散乱,而且很多没必要出现的东西会误导新人的
使用,因此我认为这个更适合已经成功接入并使用的人进一步考究,下面我整理一个小白入门文档,看完这篇,小时牛刀后你就能继续看上边提到的说明文
档,最后你可以去看官方文档;
proto的有点和说明我这里不再赘述,网上一堆

一、官方使用方法(没有插件前)

1、你需要去官网下载:protoc.exe 
2、你需要定义.proto说明文件,举个栗子:你需要对一个名叫Student的类的对象进行序列化压缩,那么你就要写一个文件:Student.proto,至于这个文件
内容,参考上面那个链接
3、使用protoc.exe 编译.proto文件
4、编译生成的Java文件,利用protobuf API进行序列化与反序化操作
对了,你还要再项目里面引入相关依赖,这个我忘记说了......
怎末,是不是很恶心,要不是项目需要,鬼愿意使用这玩意

二、使用这个插件(入门版)

1、引入依赖(SLF4J相关依赖请自行引入)
<!-- jprotobuf -->
<dependency><groupId>com.baidu</groupId><artifactId>jprotobuf</artifactId><version>2.4.5</version>
</dependency>
<dependency><groupId>com.baidu</groupId><artifactId>jprotobuf-precompile-plugin</artifactId><version>2.2.2</version>
</dependency>
2、写两个类(写一个也行),我这里写了Student和Teacher两个类
@Data
@ProtobufClass
public class StudentPo extends PersonPo{@Protobuf(fieldType= FieldType.STRING, order=1)private String schoolName;@Protobuf(fieldType= FieldType.INT32, order=2)private Integer grade;@Protobuf(fieldType= FieldType.OBJECT, order=3)private List<TeacherPo> teacherPos;
}
@Data
@ProtobufClass
public class TeacherPo{private String name;private Integer age;private Integer sex;
}
3、直接写一个main方法 。。。操作
public static void main(String[] args) {System.out.println("main");StudentPo student = createStudentEntity();try {// String jsonT = JSON.toJSONString(student);byte[] bytes = jsonT.getBytes();System.out.println(""+bytes.length);////Protobuf// Codec<StudentPo> studentPoCodec = ProtobufProxy.create(StudentPo.class);byte[] bb = studentPoCodec.encode(student);System.out.println(""+bb.length);// StudentPo newStudent = studentPoCodec.decode(bb);System.out.println(""+JSON.toJSONString(newStudent));} catch (Exception e) {e.printStackTrace();
}//
public static StudentPo createStudentEntity(){StudentPo student = new StudentPo();student.setName("");student.setGrade(5);student.setAge(20);student.setSex(1);student.setSchoolName("");TeacherPo teacher = new TeacherPo();teacher.setAge(28);teacher.setSex(0);teacher.setName("");List<TeacherPo> teacherPos = new ArrayList<TeacherPo>();teacherPos.add(teacher);student.setTeacherPos(teacherPos);return student;
}

Java序列化神器——Jprotobuf(小白篇)相关推荐

  1. Java序列化,看这篇就够了!

    一.序列化的含义.意义及使用场景 序列化:将对象写入到IO流中 反序列化:从IO流中恢复对象 意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输 ...

  2. Java 序列化与反序列化

    Java 序列化与反序列化 文章目录 Java 序列化与反序列化 1 序列化与反序列化的概念 2 核心类与关键字总览 3 序列化与反序列化的过程 3 应用示例 4 序列化版本号的作用 serialVe ...

  3. java序列化方案对比

    1.引言 目前移动客户端应用程序上,需要将用户内容持久化到设备上,一般任何feed流应用,如微博.推特.新闻客户端等都需要将内容做持久化操作,以便在内存回收后,再次进入程序能迅速恢复之前的内容.另外如 ...

  4. Java序列化与数据传输

    1)什么是序列化 ① 序列化:Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据.有关对象的类型的信息和存储在对象中数据的类型. 堆内存中的j ...

  5. 【通知】+ java基础提升篇:Java 序列化的高级认识

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 你所需要的 ...

  6. java基础提升篇:Java 序列化的高级认识

    如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件.那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题.静 ...

  7. Java用于下载Excel模板的接口(小白篇)

    下载Excel模板的接口(最无脑的小白篇) try {//获取要下载的模板名称String fileName = "TemplateDate.xlsx";//设置头文件respon ...

  8. 色谈Java序列化:女孩子慎入 - 第280篇

    优美格式地址:https://mp.weixin.qq.com/s/8tcHFjY1VawAkzdArkSzJQ 悟纤:师傅,最近我老是碰到一个异常:java.io.NotSerializableEx ...

  9. 一篇搞懂java序列化Serializable

    序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程. 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的 ...

  10. Java序列化与反序列化的深度思考

    目录 1.序列化与反序列化的作用 2.序列化协议 2.1 JDK序列化协议 2.1.1  Externalizable与Serializable的异同 2.2 Google ProtocolBuf 协 ...

最新文章

  1. 【Leetcode】刷题之路2(python)
  2. 不断提升自己创造溢价的能力
  3. python从入门到入土表情包-Python开发个人专属表情包网站,表情在手,天下我有...
  4. JQuery常用功能的性能优化
  5. js中字符串操作函数
  6. Java 1.1.4 检测字符串是否相等
  7. Python函数的静态变量
  8. git注意事项(持续更新中)
  9. 充电器兼容qi是什么意思_什么是“经Qi认证”的无线充电器?
  10. Linux 操作系统镜像下载
  11. 深度学习入门:手写体识别
  12. 单声道,立体声 ,功放驱动喇叭的功率选择,功放的适配(A类,B类。。),怎样测量音量信号--怎样不烧坏喇叭。
  13. linux shell编程大作业,《Linux操作系统》Shell编程大作业-01-潘春艳.doc
  14. 正确介绍自己的项目,终于不用害怕面试了
  15. 实验五 java gui
  16. MSRA提出学习实例和分布式视觉表示的极端掩蔽模型ExtreMA
  17. 关于飞塔防火墙做端口聚合的时候应该如何选择端口可以达到最好效果。
  18. 虚拟主机好还是云服务器,虚拟主机好还是云服务器
  19. int const *和int * const以及const int * const的区别
  20. html同时播放多个文件夹,ios – 如何同时播放多个音频文件

热门文章

  1. X电容Y电容如何选择与使用
  2. Endnote X9 插入参考文献、设置参考文献格式
  3. 支付宝首次揭秘红包技术
  4. java 重量单位换算_JAVA中数据存储方式以及单位转换
  5. 怎么找网页源文件位置_网页源文件看不到swf或者MP3,怎么找音频文件真实地址、...
  6. 系统文件损坏无法正常启动--记一次荡气回肠的自己挖坑自己跳然后爬出来的开心事...
  7. contest1 CF1084 div2 oooxx oooxo ooooo
  8. 蓝桥杯五4史丰收速算
  9. 投资银行理论与实务(四):资产证券化
  10. 服务器系统需要装显卡驱动吗,显卡驱动需要更新吗,详细教您显卡驱动需要更新吗...