2

BSONhttp://bsonspec.org/#/specificationで理解しようとしていますが、まだいくつかの疑問が残っています。


上記の Web サイトから例を挙げてみましょう。

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

質問1

上記の例では、エンコードされたバイトの結果について、二重引用符は実際には結果の一部ではありませんよね?

質問2

the first 4 bytes \x16\x00\x00\x00それが BSON ドキュメント全体のサイズであることは理解しています。

そしてlittle endianフォーマットです。しかし、なぜ?なぜ取らないのbig endianですか?

質問 3

サンプルドキュメントのサイズはどのようになり\x16ます22か?

質問 4

通常、ドキュメントを自分でエンコードしたい場合、ドキュメントのサイズはどのように計算すればよいですか? 私の問題は、主にUTF-8文字列のサイズを決定する方法だと思いますか?


別の例を見てみましょう:

{"BSON": ["awesome", 5.05, 1986]}   

→   

"\x31\x00\x00\x00\x04BSON\x00\x26\x00\x00\x00\x020\x00\x08\x00\x00 
 \x00awesome\x00\x011\x00\x33\x33\x33\x33\x33\x33\x14\x40\x102\x00\xc2\x07\x00\x00 
 \x00\x00"

質問5

この例では、配列があります。仕様によると、配列の場合、実際には{key, value}ペアのリストですが、キーは01などです。私の質問は、01ここでも文字列ですよね?

4

1 に答える 1

2

質問1

上記の例では、エンコードされたバイトの結果について、二重引用符は実際には結果の一部ではありませんよね?

引用符は文字列の一部ではありません。JSON文字列をマークするために使用されます

質問2

また、リトルエンディアン形式です。しかし、なぜ?ビッグエンディアンを採用しないのはなぜですか?

エンディアンの選択は、主に好みの問題です。リトル エンディアンの利点の 1 つは、一般的に使用されるプラットフォームがリトル エンディアンであるため、バイトを逆にする必要がないことです。

質問 3

サンプル ドキュメントのサイズが \x16、つまり 22 になるのはなぜですか?

22 バイトあります (長さのプレフィックスを含む)

質問 4

通常、ドキュメントを自分でエンコードしたい場合、ドキュメントのサイズはどのように計算すればよいですか? 私の問題は、主にUTF-8文字列のサイズを決定する方法だと思いますか?

最初に文書を書き出してから、戻って長さを記入します。

質問 5

この例では、配列があります。仕様によると、配列の場合、実際には {key, value} ペアのリストですが、キーは 0、1 などです。私の質問は、ここの 0、1 も文字列ですよね?

はい。正確には、長さのプレフィックスのないゼロで終了する文字列。(リストで呼び出さcstringれます)。埋め込みドキュメントと同じです。

于 2013-04-23T13:10:40.937 に答える