编码
编码是一种将信息或数据转换为特定格式的过程,以便在传输、存储或处理时能够被正确识别和理解。编码是将原始信息转换为数字、符号或其他形式的过程,以便在不同的系统、平台或设备之间进行交互和沟通
定长编码
编码的长度是固定的,只需要知道数据的个数再乘上每个数据的长度就可以知道总长度,例如字符串数组
变长编码
变长编码的目的是压缩信息,并非所有数据的长度都一致,例如 uint64 中存储小数的时候用到的信息非常短,于是就产生了一种变长编码方式,例如每7个bit为一组,最高位表示是否停止
序列化
序列化是一种将对象或数据转换为字节流或其他可存储格式的过程,以便在内存之外进行存储和传输。序列化的目的是将对象的状态或数据结构转换为一种紧凑、可读的形式,以便在需要时能够快速还原为原始对象
序列化分为元数据,索引段和数据段
元数据
存储着这段数据的有关信息,如类型,索引长度,数据长度等
将一段数据的元数据交给解码器,就可以进行自动解码了
索引段
存储着这段数据的索引,可以是偏移地址,布隆过滤器,或者其他一些数据,不同的索引对应不同的数据
数据段
数据段存放着索引对应的数据,数据段中的某一块也可以是一段序列化后的数据结构(可嵌套)
嵌套数据结构序列化
当进行数据结构嵌套的编码时,可以把当前类中的基本数据当作索引段,把拥有的子类当作数据段
反序列化
只需要拿到序列后对序列进行解码即可,注意一段数据的设计必须是便于解码的
反序列化的精髓在于需要在文件中提取信息时,可以通过索引快速提取到一段数据
更便捷的反序列化方式是只要拿到信息的开头,不用拿到信息的长度就可以将信息反序列化,那么我们要么记录变长信息的长度,要么对变长信息使用变长编码