BSON结构

BSON结构BSON 结构 flyfish2015 7 24 主要解释 bsonspec org 网站上的两个例子 hello world nbsp hello 为 key world 为 value 对应的是 nbsp x16 x00 x00 x00 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp x02 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp

BSON结构

flyfish 2015-7-24

主要解释bsonspec.org网站上的两个例子

{“hello”: “world”} 

hello为key,world为value 对应的是

  \x16\x00\x00\x00                   
  \x02                               
  hello\x00                          
  \x06\x00\x00\x00world\x00
  \x00 



解释每一行的意思

\x16\x00\x00\x00 
\x表示16进制的方式
4个字节表示文档的大小,包括文档末尾的’\0′,’\0’是\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 

hello\x00 
表示以’\0’结尾的字符串

\x06\x00\x00\x00world\x00
\\x06\x00\x00\x00 前4个字节表示以’\0’结尾的字符串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]}

对应是

  \x31\x00\x00\x00
  \x04BSON\x00
  \x26\x00\x00\x00
  \x02\x30\x00\x08\x00\x00\x00awesome\x00
  \x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
  \x10\x32\x00\xc2\x07\x00\x00
  \x00
  \x00






解释每一行的意思
\x31\x00\x00\x00
4个字节表示文档的大小,x31的10进制是49,这个文档的大小是49个字节

\x04BSON\x00
原文:”\x04″ e_name document Array
\x04表示value的类型是数组表示的document
BSON\x00 表示以’\0’结尾的字符串

\x26\x00\x00\x00 
4个字节表示数组的大小即中括号的内容,x26的10进制是38

\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x02 表示value的类型是string
x30表示key,字符0的ASCII码是48,16进制是x30
纵向看正好是x30,x31,x32
\x08\x00\x00\x00  4个字节表示awesome\x00 长度

\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40

\x01
原文\x01″ e_name double 64-bit binary floating point
表示64位的二进制浮点数
x31\x00表示以’\0’结尾的字符串1,字符1的ASCII码是x31
x33\x33\x33\x33\x33\x33\x14\x40
double的5.5转换成16进制为40 14 33 33 33 33 33 33

\x10\x32\x00\xc2\x07\x00\x00
原文:”\x10″ e_name int32 32-bit integer
\x10表示32位的整数
\x32\x00表示以’\0’结尾的字符串2,字符2的ASCII码是x32
\xc2\x07\x00\x00
也就是16进制的7c2转换成10进制是1986   \x00

  \x00

结束符





































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176672.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:20
下一篇 2026年3月26日 下午9:21


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号