Почему это называется BSON? - PullRequest
9 голосов
/ 24 августа 2010

Итак, BSON правильно сериализован в JSON?

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

Но почему он называется Binary Json?Что означает двоичный код?

Я всегда склонен связывать двоичный файл с 10101010101. Но приведенный выше формат сериализации BSON был не в форме 101010101010.

Может ли кто-нибудь объяснить мне, что здесь означает двоичныйтак я понимаю, почему он называется Binary JSON?

Ответы [ 3 ]

20 голосов
/ 24 августа 2010

Это двоичный файл в отличие от текста. В то время как JSON - это читаемый человеком текст, BSON - это двоичные данные (только байты). Вы могли бы записать его как 1001010 и т. Д., Но чаще показывать каждый байт за раз (так что \ x16 - это просто шестнадцатеричное 16, то есть десятичный байт 22). По сути, здесь используется двоичный код, чтобы сравнить его с текстовыми данными, не говоря уже о том, что это фактически база 2. В частности.

Это означает, что вы можете использовать BSON только в ситуациях, когда вы можете транспортировать произвольные двоичные данные. Например, если вы хотите встроить BSON в документ XML (по какой-либо причине!), Вам придется сначала кодировать его с помощью base64, поскольку XML является текстовым представлением.

4 голосов
/ 24 августа 2010

Двоичный код действительно является неправильным, поскольку все на вашем компьютере является «двоичным» на некотором уровне. Двоичный формат, когда дело доходит до файловых или сетевых потоковых форматов, означает непростое понимание человеком. Это также имеет тенденцию быть компактным.

Примеры текстовых или «читаемых человеком» (понятных человеку) форматов файлов и потоков:

Примеры «двоичных» форматов файлов и потоков:

Самое заметное, что понятные человеку форматы требуют гораздо меньше объяснений, если вы просто взломаете их и начнете читать. Двоичные форматы файлов могут требовать целых книг для объяснения:)

Формат не обязательно должен быть чисто «двоичным» или понятным человеку. Например, вы могли бы понять последовательность однозначных чисел без пробелов, которые представляют собой массив однозначных чисел. Вы, вероятно, не могли понять серию из 48 чисел (без пробелов), которые представляют значения x, y и z для 16 трехмерных вершин, даже если вы можете «прочитать» их. Также есть пример закодированных «двоичных» данных в Skeet, особенно если они встроены в более понятный для человека формат.

1 голос
/ 11 января 2011

Причина, по которой он называется «двоичным», уже объяснена: в основном он не текстовый, поэтому существует различие в стиле Unix (двоичные и текстовые файлы).

Но часть JSON также нечетна, поскольку BSONэто не JSON - это ни подмножество, ни надмножество.У него гораздо больше типов данных, так что это своего рода суперсет;но он также не поддерживает весь допустимый JSON из-за ограничений на такие вещи, как ограничение имени свойства и длины строкового значения.

...