BSON结构
BSON结构
flyfish 2015-7-24
{"hello": "world"}
hello为key,world为value 对应的是
x16x00x00x00
x02
hellox00
x06x00x00x00worldx00
x00
解释每一行的意思
x16x00x00x00
x表示16进制的方式
4个字节表示文档的大小,包括文档末尾的" "," "是x00 0x16十进制是22,这个文档的大小是22个字节
采用小端(Little Endian) 原文:Each type must be serialized in little-endian format.
每一种类型必须按照little-endian格式序列化。
x02
一个字节表示value的类型,通过查看bsonspec 文档
原文:"x02" e_name string UTF-8
x02 表示value的类型是string,字符串编码使用的是UTF-8
hellox00
表示以" "结尾的字符串
x06x00x00x00worldx00
\x06x00x00x00 前4个字节表示以" "结尾的字符串world的长度
x00
结束符
二
{"BSON": ["awesome", 5.05, 1986]}
原文:the array ["red", "blue"] would be encoded as the document {"0": "red", "1": "blue"}. The keys must be in ascending numerical order.
数组["red", "blue"]将要编码为{"0": "red", "1": "blue"},key必须按照数值大小递增排序(升序)。
也就是["awesome", 5.05, 1986]将被编码为{ "0":"awesome", "1":5.05,"2":1986}
{"BSON": [ "0":"awesome", "1":5.05,"2":1986]}
对应是
x31x00x00x00
x04BSONx00
x26x00x00x00
x02x30x00x08x00x00x00awesomex00
x01x31x00x33x33x33x33x33x33x14x40
x10x32x00xc2x07x00x00
x00
x00
解释每一行的意思
x31x00x00x00
4个字节表示文档的大小,x31的10进制是49,这个文档的大小是49个字节
x04BSONx00
原文:"x04" e_name document Array
x04表示value的类型是数组表示的document
BSONx00 表示以" "结尾的字符串
x26x00x00x00
4个字节表示数组的大小即中括号的内容,x26的10进制是38
x02x30x00x08x00x00x00awesomex00
x02 表示value的类型是string
x30表示key,字符0的ASCII码是48,16进制是x30
纵向看正好是x30,x31,x32
x08x00x00x00 4个字节表示awesomex00 长度
x01x31x00x33x33x33x33x33x33x14x40
x01
原文x01" e_name double 64-bit binary floating point
表示64位的二进制浮点数
x31x00表示以" "结尾的字符串1,字符1的ASCII码是x31
x33x33x33x33x33x33x14x40
double的5.5转换成16进制为40 14 33 33 33 33 33 33
x10x32x00xc2x07x00x00
原文:"x10" e_name int32 32-bit integer
x10表示32位的整数
x32x00表示以" "结尾的字符串2,字符2的ASCII码是x32
xc2x07x00x00
也就是16进制的7c2转换成10进制是1986
x00
结束符
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。