Expand description
二进制对象表示法 模块 Binary Object Notation
本模块定义了一个使用二进制表示数据的协议,并实现该协议
模块提供写的接口,将数据按照协议序列化为二进制。
提供读的接口,将满足协议的二进制反序列化为数据。
TODO 为本协议实现Serializer、Deserializer
协议内容:
小端-非网络字节序,和quic一致
用于通讯的类型需要压缩表示,充分利用第一个字节
0=null
1=false
2=true
3=浮点数0.0,4=浮点数1.0,5=16位浮点数,6=32位浮点数,7=64位浮点数,8=128位浮点数;
9=8位负整数,10=16位负整数,11=32位负整数,12=48位负整数,13=64位负整数,14=128位负整数
15~35= -1~19
36=8位正整数,37=16位正整数,38=32位正整数,39=48位正整数,40=64位正整数,41=128位正整数
42-106=0-64长度的UTF8字符串,
107=8位长度的UTF8字符串,108=16位长度的UTF8字符串,109=32位长度的UTF8字符串,110=48位长度的UTF8字符串
111-175=0-64长度的二进制数据,
176=8位长度的二进制数据,177=16位长度的二进制数据,178=32位长度的二进制数据,179=48位长度的二进制数据
180-244=0-64长度的容器,包括对象、数组和map、枚举
245=8位长度的容器,246=16位长度的容器,247=32位长度的容器,248=48位长度的容器
之后的一个4字节的整数表示类型。
类型:
0 表示忽略
1 通用对象
2 通用数组
3 通用map
如果是通用对象、数组、map,后面会有一个动态长度的整数,表示元素的数量。
容器,由于有总大小的描述,从而可以只对感兴趣的部分作反序列化
TODO 定义一个全类型的枚举 enum BonType
Structs§
- ReadBuffer,用于将二进制反序列化为对应数据
- 用于对数据进行序列化
Enums§
- 定义读时的错误