2013-04-02 5 views
4

Я пытался понять BSON Notations с сайта BSON Site. Однако я не мог понять причину корреляций.Понимание BSON Обозначение

Я также сослался на следующие вопросы, но не убежден по следующим причинам.

Question 1: Не знаком с рубином реализации

Question 2: Я понял, распределение байт. Но не уверены в обозначениях.

Я хотел бы знать как формируется объект BSON для следующих примеров в BSON Site

1 { "привет": "мир"}.
2 { "BSON":. [» удивительным», 5,05, 1986]}

ответ

16

{ "привет": "мир"}

\x16\x00\x00\x00 
    \x02 hello\x00 \x06\x00\x00\x00 world\x00 
\x00 

(в целом: 22 байта)

Первые четыре байта содержат общую длину как 32-разрядное малоконечное целое число.

\x16\x00\x00\x00 => Это 22 десятичных знаков.

Теперь наступает первый элемент. Первый байт дает тип данных.

\x02 => Это строка UTF-8.

Затем появляется имя первого элемента как строка с нулевым символом.

hello\x00

Далее идет данные элемента в ранее данного типа, в данном случае строки. Для сканирования (так что вы можете быстро пропустить, когда они вам не нужны), строки начинаются с их длины и заканчиваются нулем.

\x06\x00\x00\x00 => Это длина 6.

world\x00

Теперь придет последующие элементы, если таковые были. Все это заканчивается нулевым байтом.

\x00


{ "BSON": [ "удивительным", 5.05, 1986]}

\x31\x00\x00\x00 
    \x04 BSON\x00 \x26\x00\x00\x00 
        \x02 0\x00 \x08\x00\x00\x00 awesome\x00 
        \x01 1\x00 \x33\x33\x33\x33\x33\x33\x14\x40 
        \x10 2\x00 \xc2\x07\x00\x00 
       \x00 
\x00 

(общая: 49 байт, массив: 38 байт)

Первые четыре байта содержат общую длину как 32-разрядное малоконечное целое число.

\x31\x00\x00\x00 => Это 49 в десятичной форме.

Теперь наступает первый элемент. Первый байт дает тип данных.

\x04 => Это массив.

Затем появляется имя первого элемента как строка с нулевым символом.

BSON\x00

Далее идет данные элемента в ранее данного типа, в данном случае массива.

[Цитата: «Документ для массива является нормальным BSON документ с целыми для ключей, начиная с 0 (..)»]

Для scannability и потому, что они образуют документ в своем собственном right, массивы начинаются с их длины и заканчиваются нулем.

\x26\x00\x00\x00 => Это 38 десятичных знаков.

Теперь наступает первый элемент массива. Первый байт дает тип данных.

\x02 => Это строка UTF-8.

Затем появляется имя первого элемента массива с нулевым завершением.

0\x00 => Это ключ 0.

Далее идет данные элемента в ранее данного типа, в этом случае строки. Строки начинаются с их длины и заканчиваются нулем.

\x08\x00\x00\x00 => длина 8

awesome\x00

Теперь приходит второй элемент массива. Первый байт дает тип данных.

\x01 => Это номер с двойной плавающей запятой.

Затем появляется имя второго элемента массива с нулевым завершением.

1\x00 => Это ключ 1.

Далее идет данные элемента в ранее данного типа, в этом случае двойное число с плавающей точкой.

\x33\x33\x33\x33\x33\x33\x14\x40 => Это 5.5.

Теперь идет третий элемент массива. Первый байт дает тип данных.

\x10 => Это 32-разрядное целое число.

Затем появляется имя третьего элемента массива с нулевым завершением.

2\x00 => Это ключ 2.

Далее идет данные элемента в ранее данного типа, в данном случае 32-разрядное целое число.

\xc2\x07\x00\x00 => Это 1986.

Массив завершается с нулевым байтом.

\x00

Все это заканчивается нулевым байтом.

\x00

+0

Спасибо @ NicolasKaiser..Regarding маленьких символов порядком байт, http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/ –

Смежные вопросы