2010-08-24 67 views
9

所以BSON是JSON序列化的权利?为什么叫做BSON?

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

但为什么叫二进制Json的?二进制代表什么?

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

有人能为我解释这里的Binary是什么意思,所以我明白为什么它被称为二进制JSON?

+3

'10101010101'是基数2(二进制)中的数字,不一定是二进制“数据”。 – 2010-08-24 07:47:00

回答

20

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

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

4

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

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

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

这里最值得注意的问题是,人类可以理解的格式需要少了很多的解释,如果你简单地破解它们打开并开始阅读。二进制文件格式可能需要整本书来解释:)

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

1

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

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