我们可以把序列化以后的数据打印出来看看结果

public static void main(String[] args) { UserProtos.User user = UserProtos.User.newBuilder(). setAge(300).setName("Mic").build(); byte[] bytes=user.toByteArray(); for(byte bt:bytes){ System.out.print(bt+" "); }
} 

我们可以看到,序列化出来的数字基本看不懂,但是序列化以后的数据确实很小,那我们接下来带大家去了解一下底层的原理

正常来说,要达到最小的序列化结果,一定会用到压缩的技术,而protobuf里面用到了两种压缩算法,一种是varint,另一种是zigzag

Protobuf序列化的原理相关推荐

  1. Protobuf序列化的原理-protobuf的基本应用

    使用protobuf开发的一般步骤是 1. 配置开发环境,安装protocol compiler代码编译器 2. 编写.proto文件,定义序列化对象的数据结构 3. 基于编写的.proto文件,使用 ...

  2. Protobuf序列化的原理-总结

    Protocol Buffer的性能好,主要体现在 序列化后的数据体积小 & 序列化速度快,最终使得传输效率高,其原因如下: 序列化速度快的原因: a. 编码 / 解码 方式简单(只需要简单的 ...

  3. Protobuf序列化的原理-负数的存储

    在计算机中,负数会被表示为很大的整数,因为计算机定义负数符号位为数字的最高位,所以如果采用varint编码表示一个负数,那么一定需要5个比特位.所以在protobuf中通过sint32/sint64类 ...

  4. Protobuf序列化的原理-存储格式

    protobuf采用T-L-V作为存储方式 tag的计算方式是 field_number(当前字段的编号) << 3 | wire_type 比如Mic的字段编号是1 ,类型wire_ty ...

  5. Protobuf序列化的原理-字符如何转化为编码

    "Mic"这个字符,需要根据ASCII对照表转化为数字. M =77.i=105.c=99 所以结果为 77 105 99 大家肯定有个疑问,这里的结果为什么直接就是ASCII编码 ...

  6. Protobuf序列化的原理-varint

    先说第一种,我们先来看age=300这个数字是如何被压缩的 这两个字节字节分别的结果是:-84 .2 -84怎么计算来的呢? 我们知道在二进制中表示负数的方法,高位设置为1, 并且是对应数字的二进制取 ...

  7. Protobuf序列化原理

    一.Protobuf序列化原理简介 1.1序列化 序列化是将数据结构或对象转换成二进制字节流的过程. Protobuf对于不同的字段类型采用不同的编码方式和数据存储方式对消息字段进行序列化,以确保得到 ...

  8. 【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )

    文章目录 一.TCP 粘包和分包 二.TCP 粘包和分包解决方案 三.客户端 Android 应用使用 Protobuf 四.服务器端 Java 服务器使用 Protobuf 五.参考资料 一.TCP ...

  9. Android Protobuf应用及原理

    前言 之前一直忙于移动端日志SDK Trojan的开源工作,已十分稳定地运行在饿了么团队App中,集成了日志加密和解密功能.哎呀,允许我卖个狗皮膏药,不用不知道,用了就知道,从此爱不释手,Trojan ...

最新文章

  1. 每日一皮:如何用一句话让领导和同事都尴尬至极?
  2. draw.io项目本地部署
  3. 用VC++实现通用的报表控件
  4. 计算机5G英语文献,无线通信英文参考文献精选
  5. 线段树--codevs 1690 开关灯
  6. Git的强制操作:强制推送[项目中千万不要用] 强制下拉
  7. bootstrap起步 全局css样式概览 全局css样式_栅格 全局css样式_排版
  8. (事件类型: 警告;事件代码:3005)的解惑
  9. ps制作20种特效文字_用PS制作裂、火、电特效——电
  10. 【腾讯bugly干货】QQ空间直播秒开优化实践
  11. 肖申克的救赎,阅后瞎想...(zz)写的不错
  12. js des加密 java_java端采用DES/CBC/PKCS5Padding 加密,js解密不了。google搜了好多方法没能解决...
  13. windows Service 之调试过程
  14. Caused by: java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.HibernateTemplate
  15. QQ-AR实物识别!香蕉扫一扫,解救小黄人?
  16. Chrome键盘快捷键
  17. python 对 文件内容 搜索_python实现搜索文本文件内容脚本
  18. NVDIMM为存储加速
  19. [HSR算法-Occlusion Culling]
  20. 应用软件 故障隔离_隔离软件工程师生命中的一天

热门文章

  1. TP的URL设计和SEO支持
  2. seo优化闲了吧----第一回目
  3. GoLang-Beego使用
  4. 从面试蚂蚁失败反思-缓存穿透技术
  5. phpstrom 代码格式
  6. IE中a标签绝对定位时才生的bug
  7. 新浪微博客户端(eoe)
  8. Mysql一些导入导出数据库,添加修改字段命令
  9. .adobe.ETH.btc.frendi.AUF.AYE.qwex后缀勒索病毒
  10. [菜鸟SpringCloud实战入门]第七章:配置中心客户端主动刷新机制 + 配置中心服务化和高可用改造...