如何手搓序列化器(以java为例)

在学kafka的过程中,我发现kafka并没有封装序列化器,需要程序员自己去手动构造,而构造方法的差异很大程度上会影响kafka最终的性能,以下有两种构造思路:

  1. 使用Json。由于json有自带的序列化和反序列化方法,因此可以直接使用json。

缺点:拥有冗余信息,比如"{}" ":" ,这些冗余信息在kafka持久化的场景下会占用更多的内存,性能会成倍的受到影响。

  1. 手搓序列化。java里有两种数据类型,一类是定长的,比如int long等,可以直接转化为比特流。另一类是不定长的,比如string 甚至user对象。

第二类不定长的该如何序列化以及反序列化呢?

可以参考tcp粘包的思路,将长度放在前面存储,序列化时先序列化长度,再序列化存储的内容。反序列化时,先读取长度,再根据长度反序列化内容。没有冗余数据,性能得以提升

相关推荐
MY_TEUCK1 小时前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程
java·人工智能·学习·aigc
2401_873479401 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope1 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
菜鸟学Python2 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
朝新_2 小时前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH2312112 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts3 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
浪浪小洋3 小时前
c++ qt课设定制
开发语言·c++
charlie1145141913 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
故事和你913 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论