【问题标题】:Why is it called BSON?为什么叫BSON?
【发布时间】:2011-01-11 14:58:45
【问题描述】:

那么 BSON 是 JSON 序列化的吧?

{"hello": "world"}"\x16\x00\x00\x00\x02hello\x00 \x06\x00\x00\x00world\x00\x00"

但是为什么叫Binary Json呢?二进制代表什么?

我总是倾向于将二进制与 10101010101 联系起来。但是上面的 BSON 序列化格式不是 101010101010 的形式。

谁能为我解释一下这里的二进制是什么意思,这样我就明白为什么它被称为二进制 JSON 了吗?

【问题讨论】:

  • 10101010101 是以 2 为底的数字(二进制​​),不一定是二进制“数据”。

标签: javascript json bson


【解决方案1】:

它是二进制而不是文本。 JSON 是人类可读的文本,而 BSON 是二进制数据(只是字节)。您可以将其写为 1001010 等,但更常见的是一次显示每个字节(因此 \x16 只是十六进制 16,即十进制字节 22)。基本上这里的“二进制”是用来和文本数据比较的,并不是说它实际上是特别是base 2。

这意味着您只能在可以传输任意二进制数据的情况下使用 BSON。例如,如果您想将 BSON 嵌入 XML 文档(无论出于何种原因!),您必须首先对其进行 base64 编码,因为 XML 是基于文本的表示。

【讨论】:

    【解决方案2】:

    二进制确实是用词不当,因为您计算机上的所有内容在某种程度上都是“二进制”的。二进制,当涉及到文件或网络流格式时,意味着不容易被人类理解。它也趋于紧凑。

    文本或“人类可读”(人类可理解)文件和流格式的示例:

    “二进制”文件和流格式示例:

    这里最值得注意的是,如果您只是将它们打开并开始阅读,那么人类可以理解的格式需要的解释要少得多。二进制文件格式可能需要整本书来解释:)

    不过,格式不一定是纯粹的“二进制”或纯粹是人类可以理解的。例如,您可能会理解一系列不带空格的个位数,它们代表一个个位数的数组。您可能无法理解一系列 48 个数字(没有空格),它们代表 16 个 3d 顶点的 x、y 和 z 值,即使您可以“阅读”它们。此外,还有 Skeet 的编码“二进制”数据示例,特别是如果它嵌入在更易于人类理解的格式中。

    【讨论】:

      【解决方案3】:

      已经解释了它被称为“二进制”的原因:基本上,它不是文本的,因此是 unix 风格的区别(二进制文件与文本文件)。

      但 JSON 部分也很奇怪,因为 BSON 不是 JSON——它既不是子集也不是超集。它有更多的数据类型,所以它是一种超集;但由于属性名称和字符串值长度限制等限制,它也不支持所有合法的 JSON。

      【讨论】:

        猜你喜欢
        • 2012-08-17
        • 2014-01-17
        • 2016-04-06
        • 2011-08-20
        • 2010-11-19
        • 2016-12-12
        • 1970-01-01
        • 2012-08-15
        • 2010-10-09
        相关资源
        最近更新 更多