سؤال

هل BASE64 مشفر BSON أصغر ثم BSON؟

هل كانت مفيدة؟

المحلول

يمين Piskvor ، Base64-encoded-anhother أطول من الخام. يمكنك Base64-encode شيء للحصول عليه على قناة ذات ذخيرة ذات أحرف محدودة ، وليس كوسيلة لتقليل حجمها.

ربما يجب أن يكون السؤال: هل Base64 bson أصغر بعد ذلك جيسون?

إذا كان الأمر كذلك ، فإن JSON-VS-BSON تعتمد إلى حد كبير على المحتوى. على سبيل المثال أرقام نقاط عائمة تعسفية مثل 1.2345678901234567 يتم تخزينها بشكل أكثر كفاءة في 8 بايتات ثنائية في BSON من إصدار JSON String Digit. لكن الأرقام الأكثر شيوعًا مثل ، على سبيل المثال ، 1, ، يتم تخزينها بشكل أكثر كفاءة كأسلاك في JSON.

بالنسبة لقيم السلسلة ، تفقد BSON 4 بايت لكلمة طولها ، ولكنها تعود إلى كل شيء " و \ يتعين على JSON الهروب ، بالإضافة إلى المزيد في الأوتار مع شخصيات التحكم حيث يتعين على JSON استخدام تسلسل HEX. (بعض ترميزات JSON أيضًا \u-قم بتشكيل كل حرف غير ASCII لضمان انتقال آمن بغض النظر عن مجموعة الأحرف.)

IMO: BSON ليس لديه ميزة ضغوط كبيرة على JSON بشكل عام. تكمن قوتها في بساطة فك التشفير في لغة منخفضة المستوى ، بالإضافة إلى أنواع البيانات التي لا تملكها JavaScript. يمكن أن يكون لها مزايا هامشية للسلاسل الثنائية وبعض الحالات الأخرى ؛ من المؤكد أنه يستحق التحقق من عبء عمل معين. لكن هذا ما يقول أن الأمثلة في مواصفات BSON نفسها أصغر بكثير في JSON.

أما بالنسبة لـ BASE64 BSON 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top