質問
それで、BsonはJSONがシリアル化されていますか?
{"hello": "world"}
→ "\x16\x00\x00\x00\x02hello\x00 \x06\x00\x00\x00world\x00\x00"
しかし、なぜそれはバイナリJSONと呼ばれるのですか?バイナリは何を表していますか?
私は常にバイナリを1010101011に関連付ける傾向があります。しかし、上記のBSONシリアル化形式は101010101010フォームではありませんでした。
ここでのバイナリが何を意味するのかを誰かが私のために説明できますか?
解決
テキストとは対照的にバイナリです。 JSONは人間の読み取り可能なテキストですが、BSONはバイナリデータ(バイトのみ)です。君 たぶん......だろう 1001010などとして書き留めますが、一度に各バイトを表示する方が一般的です(したがって、 x16は16個、つまり小数バイト22です)。基本的に「バイナリ」は、それをテキストデータと比較するために使用されます。
これは、任意のバイナリデータを輸送できる状況でのみBSONを使用できることを意味します。たとえば、XMLがテキストベースの表現であるため、XMLドキュメント(何らかの理由で)にBSONを埋めたい場合(何らかの理由で!)、最初にベース64エンコードする必要があります。
他のヒント
バイナリは、コンピューター上のすべてがあるレベルで「バイナリ」であるため、実際には誤称です。バイナリは、ファイルまたはネットワークストリーム形式に関しては、簡単に人間的に理解できないことを意味します。また、コンパクトになる傾向があります。
テキストまたは「人間の読み取り可能」(人間の理解可能な)ファイルおよびストリーム形式の例:
「バイナリ」ファイルとストリーム形式の例:
ここで最も注意するのは、単にそれらを開いて読み始めるだけで、人間の理解可能な形式がはるかに少ない説明が必要であるということです。バイナリファイル形式は、説明するために本全体が必要になる場合があります:)
ただし、フォーマットは必ずしも純粋に「バイナリ」ではなく、純粋に人間が理解できるわけではありません。たとえば、スペースのない一連の単一数字番号を理解できます。おそらく、16の3D頂点のx、y、z値を表す48の数字(スペースがない)のシリーズを理解することはできませんでした。また、特に、より人間の理解可能な形式に埋め込まれている場合、エンコードされた「バイナリ」データのスキートの例があります。
それが「バイナリ」と呼ばれる理由はすでに説明されています。基本的に、それはテキストではなく、したがってUnixスタイルの区別(バイナリ対テキストファイル)です。
しかし、BSONはJSONではないため、JSONの部分も奇妙です。サブセットでもスーパーセットでもありません。さらに多くのデータ型があるため、スーパーセットのようなものです。しかし、プロパティ名や文字列の値の長さの制限などの制限のため、すべてのLegal JSONをサポートするわけではありません。