了解protoStuff

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,目前工作于上海某电商服务公司…”);
📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正!共同进步,共同成长✊”);
🌟System.out.println(“💡如果文章对您有所帮助,希望您可以三连支持一下博主噢🔥”);
🌈System.out.println("🚀正在完成计划中:Java应届第一年规划 ");

实现原理

原理: Protostuff 利用 Java 的反射机制,将对象的字段信息以及对应的数值序列化为字节数组。它采用了类似于 Protocol Buffers 的二进制编码方式,将对象的字段名和字段值一一对应地写入字节数组中。
Schema 定义:ProtoStuff 使用 Schema 来描述 Java 对象的结构信息,包括字段名称、类型等。Schema 可以通过编译.proto 文件生成,也可以通过运行时动态生成。

  • 对象进行序列化的逻辑
  • 对象进行反序列化的逻辑
  • 对象必填字段的验证
  • 对象字段名称到字段编号的映射
  • 对象的实例化

序列化:当需要将 Java 对象序列化为字节流时,ProtoStuff 会根据对象的 Schema 将其转换为二进制格式。ProtoStuff 采用紧凑的二进制编码方式,使得序列化后的字节数量较小。
反序列化:当需要将字节流反序列化为 Java 对象时,ProtoStuff 会根据对象的 Schema 将其转换为对应的 Java 对象。ProtoStuff 通过读取字节流中的字段信息,并根据 Schema 进行解析和赋值操作。
序列化过程:LinkedBuffer在执行序列化过程中,会动态的扩张,每一个LinkedBuffer会保存部分序列化的内容。会维护一个全局size,表示最终的byte[]大小。填充完所有LinkedBuffer之后,会遍历LinkedBuffer,直到把所有的buffer内容copy到byte[size]中,合并为一个byte[],序列化结束。

  • LinkedBuffer是用于存储序列化过程中字节数组的数据结构
  • 经过内存拷贝。LinkedBuffer中的buffer回收也会导致gc
  • @Tag 可以设置顺序(filedTag << 3)

优势

  1. protobuf每次要编写接口定义文件,然后还要编译,操作太繁琐;protostuff基于protobuf,但是提供了更多的功能和更简易的用法。
  2. 相对json等文本序列化库,protostuff是二进制的,性能比json等方式高;
  3. 序列化和反序列化
  • CPU上:protostuff占用比protobuf少
  • 内存上:protostuff、protobuf 有时候多有时候少

参考文章:https://cloud.tencent.com/developer/article/1147190

最后

慢慢的来,别着急!学会有质量的走过每一步


我是代码不会敲的小符,希望认识更多有经验的大佬,也在努力摸索出自己的道路
欢迎交流:A13781678921,一起加油

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码不会敲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值