IS BASE64 закодирован BSON меньший, а затем BSON?
Вопрос
IS BASE64 закодирован BSON меньший, а затем BSON?
Решение
Право Piskvor, Base64-кодировка - что-нибудь длиннее, чем сырое. Вы Base64-кодируют что-то, чтобы получить его по каналу с ограниченным репертуаром символов, а не как средство уменьшения размера.
Возможно, вопрос должен быть: Base64-закодирован BSON меньше Json.?
Если так, то JSON-VS-BSON очень зависит от содержания. Например, произвольные числа плавающих точек, как 1.2345678901234567
более эффективно хранятся в 8 двоичных байтах в BSON, чем версия json String Digit. Но более распространенные цифры, как, скажем, 1
, гораздо более эффективно хранятся как строки в JSON.
Для строковых значений BSON теряет 4 байта для длины слова, но возвращается к каждому "
а также \
JSON должен сбежать, плюс больше в струнах с контрольными символами, где JSON должен использовать шестнадцатеричную последовательность. (Некоторые энкодеры JSON также \u
- Ecpape каждый символ без ASCII для обеспечения безопасной коробки передач независимо от набора символов.)
IMO: BSON не имеет большого преимущества компактности над JSON в целом. Его сила заключается в простоте декодирования на низкоуровневом языке, плюс NataTypes JavaScript не имеет. Он может иметь предельных преимуществ для двоичных строк и несколько других случаев; Это, безусловно, стоит проверять определенную рабочую нагрузку. Но это говорит о том, что примеры в сами спецификации BSON значительно меньше в JSON.
Что касается закодированного base64-encoded bson: то же самое, кроме на 33% хуже.
Другие советы
Нет: с Base64, 3 байта открытого текста становятся 4 байтами закодированного текста, поэтому результат всегда будет больше, независимо от того, что такое полезная нагрузка. Смотрите также: http://en.wikipedia.org/wiki/base64.
Просто написал это как мою реюмирую, чтобы добывать BSON, пожалуйста, проверьте, это может помочь вам:
var bsonShortify = {
encode:function(bson){
return this._hex2urlBase(bson.substr(0,bson.length/2))+this._hex2urlBase(bson.substr(bson.length/2,bson.length/2));
},
decode:function(token){
return this._urlBase2hex(token.substr(0,token.length/2))+this._urlBase2hex(token.substr(token.length/2,token.length/2));
},
_base:62,
_baseChars:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
_urlBase2hex:function(token){
var s = 0, n, l = (n = token.split("")).length, i = 0;
while(l--) s += this._baseChars.indexOf(n[i++]) * Math.pow(this._base, l);
return s.toString(16);
},
_hex2urlBase:function(bson){
var s = "", n = parseInt(bson,16);
while(n) s = this._baseChars[n % this._base] + s, n = Math.floor(n / this._base);
return s;
}
}
ТЕСТОВОЕ ЗАДАНИЕ
//we have bson
var bson = '4f907f7e53a58f4313000028';
//let's encode it
var urlstring = bsonShortify.encode(bson) // = OqAYQdCHijCDMbRg
//let's decode urlstring
var decoded_bson = bsonShortify.decode(urlstring); // = 4f907f7e53a58f4313000028
console.log('bson',bson);
console.log('urlstring',urlstring);
console.log('decoded_bson',decoded_bson);