Domanda

Il BSON codificato Base64 è più piccolo di BSON?

È stato utile?

Soluzione

Piskvor ha ragione, con codifica base64 qualsiasi cosa è più lunga che grezza.Codifichi qualcosa in base64 per inserirlo in un canale con un repertorio di caratteri limitato, non come mezzo per ridurre le dimensioni.

Forse la domanda dovrebbe essere:Allora il BSON con codifica Base64 è più piccolo JSON?

In tal caso, JSON-vs-BSON dipende molto dal contenuto.Ad esempio numeri in virgola mobile arbitrari come 1.2345678901234567 sono archiviati in modo più efficiente in 8 byte binari in BSON rispetto alla versione con cifre stringa JSON.Ma i numeri più comuni come, ad esempio, 1, vengono archiviati in modo molto più efficiente come stringhe in JSON.

Per i valori stringa, BSON perde 4 byte per una parola di lunghezza, ma ne recupera alcuni per ognuno " E \ JSON deve sfuggire, oltre a altro nelle stringhe con caratteri di controllo in cui JSON deve utilizzare una sequenza esadecimale.(Anche alcuni codificatori JSON \u-escape ogni carattere non ASCII per garantire una trasmissione sicura indipendentemente dal set di caratteri.)

Secondo l'IMO:BSON non presenta un grande vantaggio in termini di compattezza rispetto a JSON in generale.La sua forza risiede più nella semplicità della decodifica in un linguaggio di basso livello, oltre ai tipi di dati che JavaScript non ha.Può avere vantaggi marginali per le stringhe binarie e pochi altri casi;vale sicuramente la pena verificare un carico di lavoro particolare.Ma è significativo che gli esempi nella stessa specifica BSON siano considerevolmente più piccoli in JSON.

Per quanto riguarda BSON con codifica base64:lo stesso, tranne il 33% peggiore.

Altri suggerimenti

No: con Base64, 3 byte di testo in chiaro diventano 4 byte di testo codificato, quindi il risultato sarà sempre più grande, non importa quale sia il carico utile di dati è. Vedi anche: http://en.wikipedia.org/wiki/Base64

appena scritto questo come il mio soolution a BSON shortify si prega di controllare, può aiutare a:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top