Question

est Codé Base64 BSON plus petit BSON alors?

Était-ce utile?

La solution

le droit de Piskvor, base64-tout codé est plus long que cru. Vous quelque chose base64 encode pour faire descendre un canal avec un répertoire limité de caractères, et non comme un moyen de réduction de la taille.

Peut-être que la question devrait être: BSON base64 est plus petit puis JSON

Si oui, alors JSON-vs-BSON est très dépendant du contenu. Par exemple les nombres à virgule flottante arbitraire comme 1.2345678901234567 sont plus efficacement stockés dans 8 octets binaires dans BSON que la version à deux chiffres de chaîne JSON. Mais les chiffres les plus courants comme, par exemple, 1, sont beaucoup plus efficacement stockée sous forme de chaînes dans JSON.

Pour les valeurs de chaîne, BSON perd 4 octets pour un mot de longueur, mais obtient un peu en arrière pour chaque " et \ JSON doit échapper, et plus encore dans les chaînes avec des caractères de contrôle où JSON doit utiliser une séquence hexagonale. (Certains codeurs JSON également \u-échapper tous les caractères non-ASCII pour assurer la transmission en toute sécurité quel que soit le jeu de caractères).

OMI: BSON ne dispose pas d'un grand avantage de la compacité sur JSON en général. Sa particularité réside dans la résistance plus simple de décodage dans un langage de bas niveau, plus JavaScript n'a pas datatypes ont. Il peut avoir des avantages marginaux pour les chaînes binaires et quelques autres cas; il est certainement vérifier la valeur d'une charge de travail particulière. Mais il est dit que les exemples dans la spécification BSON se sont beaucoup plus petits en JSON.

En ce qui concerne BSON de base64 codé:. Les mêmes, sauf 33% pire

Autres conseils

Non: avec base64, 3 octets de 4 octets deviennent plaintext de texte codé, donc le résultat sera toujours plus grande, quelle que soit la charge utile de données est. Voir aussi: http://en.wikipedia.org/wiki/Base64

vient d'écrire ce que mon soolution à shortify BSON S'il vous plaît vérifier, il peut vous aider:

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;
  } 
}

Test

//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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top