4

我试图从网站BSON Site理解BSON Notations。但是我无法理解相关性背后的原因。

我也提到了以下问题,但由于以下原因,我并不相信。

问题 1:不熟悉ruby​​ 实现

问题2:我理解字节分配。但不确定符号。

我想知道BSON 站点中以下示例的 bson 对象是如何形成

1.{"hello": "world"}
2.{"BSON": ["awesome", 5.05, 1986]}

4

1 回答 1

16

{“你好世界”}

\x16\x00\x00\x00
  \x02 hello\x00 \x06\x00\x00\x00 world\x00
\x00

(总体:22 字节)

前四个字节包含作为 32 位 little-endian 整数的总长度。

\x16\x00\x00\x00=> 那是十进制的 22。

现在是第一个元素。第一个字节给出数据的类型。

\x02=> 那是一个 UTF-8 字符串。

然后是第一个元素的名称,以空字符结尾的字符串。

hello\x00

接下来是先前给定类型的元素的数据,在本例中为字符串。对于可扫描性(因此您可以在不需要它们时快速跳过),字符串以它们的长度开始,并且以空值结尾。

\x06\x00\x00\x00=> 那是长度 6。

world\x00

现在将出现后续元素,如果有的话。整个事情以一个空字节结束。

\x00


{“BSON”:[“真棒”,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 位 little-endian 整数的总长度。

\x31\x00\x00\x00=> 那是十进制的 49。

现在是第一个元素。第一个字节给出数据的类型。

\x04=> 那是一个数组。

然后是第一个元素的名称,以空字符结尾的字符串。

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

于 2013-05-11T12:49:20.703 回答