了解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,一起加油

相关推荐

  1. 了解protoStuff

    2024-06-16 17:38:01       35 阅读
  2. SSL<span style='color:red;'>了解</span>

    SSL了解

    2024-06-16 17:38:01      62 阅读
  3. IP <span style='color:red;'>了解</span>

    IP 了解

    2024-06-16 17:38:01      51 阅读
  4. 了解 websocket

    2024-06-16 17:38:01       31 阅读
  5. 了解WebSocket

    2024-06-16 17:38:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 17:38:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 17:38:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 17:38:01       82 阅读
  4. Python语言-面向对象

    2024-06-16 17:38:01       91 阅读

热门阅读

  1. 计算机网络期末复习

    2024-06-16 17:38:01       54 阅读
  2. os.system() 函数

    2024-06-16 17:38:01       28 阅读
  3. 奥拓编程语言:探索未来编程的无限可能

    2024-06-16 17:38:01       29 阅读
  4. 8、Spring之Bean生命周期~销毁

    2024-06-16 17:38:01       21 阅读
  5. 通信工程专业本科选课记录

    2024-06-16 17:38:01       32 阅读
  6. 2024前端面试准备5-React相关

    2024-06-16 17:38:01       34 阅读
  7. [leetcode] 2269. 找到一个数字的 K 美丽值

    2024-06-16 17:38:01       23 阅读
  8. 质量小议39 -- 要多少饺子皮

    2024-06-16 17:38:01       24 阅读