我试图从网站BSON Site了解 BSON Notations 。但是我无法理解相关背后的原因。
我还提到了以下问题,但由于以下原因,我不相信。
Question 1:不熟悉 ruby 实施
Question 2:我理解字节分配。但不确定这些符号。
我想知道如何为BSON Site
中的以下示例形成bson对象1. {“你好”:“世界”} 2。{“BSON”:[“awesome”,5.05,1986]}
答案 0 :(得分:16)
{“你好”:“世界”}
\x16\x00\x00\x00
\x02 hello\x00 \x06\x00\x00\x00 world\x00
\x00
(总体:22个字节)
前四个字节包含总长度为32位小端整数。
\x16\x00\x00\x00
=>这是十进制的22。
现在是第一个元素。第一个字节给出了数据类型。
\x02
=>这是一个UTF-8字符串。
然后是第一个元素的名称,作为以null结尾的字符串。
hello\x00
接下来是先前给定类型的元素的数据,在这种情况下是字符串。 对于可扫描性(因此您可以在不需要时快速跳过),字符串以其长度开头,并且以空值终止。
\x06\x00\x00\x00
=>这是长度6。
world\x00
现在会有后续元素,如果有的话。整个事情以空字节结束。
\x00
{“BSON”:[“awesome”,5.05,1986]}
\x31\x00\x00\x00
\x04 BSON\x00 \x26\x00\x00\x00
\x02 0\x00 \x08\x00\x00\x00 awesome\x00
\x01 1\x00 \x33\x33\x33\x33\x33\x33\x14\x40
\x10 2\x00 \xc2\x07\x00\x00
\x00
\x00
(总体:49个字节,数组:38个字节)
前四个字节包含总长度为32位小端整数。
\x31\x00\x00\x00
=>那是十进制的49。
现在是第一个元素。第一个字节给出了数据类型。
\x04
=>那是一个数组。
然后是第一个元素的名称,作为以null结尾的字符串。
BSON\x00
接下来是先前给定类型的元素的数据,在本例中是数组。
[引用:“数组的文档是一个普通的BSON文档 键的整数,以0(..)“]
开头对于可扫描性并且因为它们本身就形成了文档,所以数组以它们的长度开始,并且以空值终止。
\x26\x00\x00\x00
=>这是十进制的38。
现在是数组的第一个元素。第一个字节给出了数据类型。
\x02
=>这是一个UTF-8字符串。
然后是数组的第一个元素的名称,以null结尾。
0\x00
=>这是关键的0。
接下来是先前给定类型的元素的数据,在这种情况下是字符串。 字符串从它们的长度开始,并且以空值终止。
\x08\x00\x00\x00
=>长度8
awesome\x00
现在是数组的第二个元素。第一个字节给出了数据类型。
\x01
=>这是一个双浮点数。
然后是数组的第二个元素的名称,以null结尾。
1\x00
=>这是关键1。
接下来是先前给定类型的元素的数据,在这种情况下是双浮点数。
\x33\x33\x33\x33\x33\x33\x14\x40
=>那是5.5。
现在是数组的第三个元素。第一个字节给出了数据类型。
\x10
=>这是一个32位整数。
然后是数组的第三个元素的名称,以null结尾。
2\x00
=>这是关键2。
接下来是先前给定类型的元素的数据,在这种情况下是32位整数。
\xc2\x07\x00\x00
=>那是1986年。
数组以空字节结束。
\x00
整个事件以空字节结束。
\x00