2010-04-19 97 views

回答

8

Piskvor的右側base64編碼的任何東西都比原始的長。您可以使用64位編碼的方式將其壓縮到具有有限字符集的頻道上,而不是縮小尺寸。

也許問題應該是:Base64編碼的BSON小一些然後JSON

如果是這樣的話,那麼JSON-vs-BSON就非常依賴於內容。例如像1.23456789這樣的任意浮點數字在BSON中的8個二進制字節中比JSON字符串數字版本更有效地存儲。但更常見的數字,如1,在JSON中作爲字符串存儲的效率更高。

對於字符串值,BSON會丟失4個字節的長度字,但會返回一個"\ JSON必須轉義,加上更多字符串以及JSON必須使用十六進制序列的控制字符。 (一些JSON編碼器也是\u - 爲了確保安全傳輸而不考慮字符集,每個非ASCII字符都可以)。

IMO:BSON在整體上並沒有比JSON更加緊湊的優勢。它的優勢在於更低級的語言解碼的簡單性,以及JavaScript沒有的數據類型。它對二進制字符串和其他一些情況可能具有邊際優勢;當然值得檢查一個特定的工作量。但它說明了JSON中BSON規範本身的例子要小得多。

至於base64編碼的BSON:相同,除了33%更差。

+0

你的權利後來我打算比較Base64編碼的BSON到JSON。謝謝! – 2010-04-19 19:01:38

5

否:使用base64時,3個字節的明文變爲4個字節的編碼文本,因此無論數據有效負載如何,結果都會更大。另請參閱:http://en.wikipedia.org/wiki/Base64

+0

哇,我不知道,非常感謝! – 2010-04-19 19:01:01

0

剛纔寫的是我的soolution到shortify 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:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 
    _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); 
+0

我不知道這回答了大小比較的問題。 ('不低調,只是想知道) – WEFX 2012-12-12 19:59:29