Frage

Is Base64 Encoded BSON kleiner als BSON?

War es hilfreich?

Lösung

Piskvor Recht, Base64-codierte-etwas länger ist als roh. Sie Base64-codiert etwas, um es nach unten einem Kanal mit einem begrenzten Zeichenrepertoire zu erhalten, nicht als Mittel der Größe reduziert werden.

Vielleicht sollte die Frage sein:? Is Base64-kodiert BSON kleiner als JSON

Wenn ja, dann JSON-vs-BSON sehr viel über den Inhalt abhängig. Zum Beispiel floating beliebiger Punkt Zahlen wie 1.2345678901234567 werden effizienter in 8 Binärbytes in BSON als die JSON-String einstelligen Version gespeichert. Aber die häufigen Zahlen wie, sagt sie, 1 sind viel effizienter als Strings in JSON gespeichert.

Für String-Wert, verliert BSON 4 Byte für eine Länge Wort, sondern bekommt etwas zurück für jeden " und \ JSON entkommen muss, plus mehr in Strings mit Steuerzeichen, wo JSON eine Hex-Sequenz zu verwenden hat. (Einige JSON-Encoder auch \u-entkommen jedes Nicht-ASCII-Zeichen eine sichere Übertragung zu gewährleisten, unabhängig von Zeichensatz).

IMO: BSON haben keine große Kompaktheit Vorteil gegenüber JSON im Allgemeinen. Seine Stärke liegt mehr in der Einfachheit der Decodierung in einer Low-Level-Sprache sowie Datentypen JavaScript nicht verfügt. Es kann für Binärketten und einigen anderen Fällen marginal Vorteile haben; es ist sicherlich wert für eine bestimmte Arbeitsbelastung. Aber es ist zu sagen, dass die Beispiele in der BSON Spezifikation selbst in JSON wesentlich kleiner sind.

Wie bei base64-kodierten BSON. Das gleiche, nur 33% schlechter

Andere Tipps

No: mit Base64, 3 Byte-Text wird 4 Bytes codierten Textes, daher wird das Ergebnis immer größer sein, egal, was die Datennutzlast ist. Siehe auch: http://en.wikipedia.org/wiki/Base64

schrieb gerade dies als meine soolution zu shortify BSON Bitte überprüfen Sie, es kann Ihnen helfen:

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top