为什么叫BSON?

时间:2010-08-24 07:33:03

标签: javascript json bson

所以BSON是JSON序列化的吗?

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

但为什么叫Binary Json?二元代表什么?

我总是倾向于将二进制文件与10101010101相关联。但上面的BSON序列化格式不是101010101010格式。

有人可以解释一下Binary在这里意味着什么,所以我理解为什么它被称为Binary JSON?

3 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:4)

二进制实际上是一个误称,因为你的计算机上的所有东西都是某种程度上的“二进制”。二进制文件,当涉及文件或网络流格式时,意味着不容易理解。它也趋于紧凑。

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

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

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

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

答案 2 :(得分:1)

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

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