2016-10-18 13 views
1

私は、長いリストの整数、例えば[196879, 37893, 137892]で構成されている巨大な配列を持っています。この配列は、長さが450万の整数で、JSONを使ってWebページに転送するには21MBを要します。より高いベースナンバリングシステムのために長い数字を文字にエンコーディングする

質問:ファイルサイズを減らすために、これらの整数を英数字の値にエンコードする方法はありますか?私は16進数に似た何かを考えています、ここではa=10, b=11, c=12...ですが、より高い基数です。 0-9、a-z、A-Zがある場合、理論的には、9Eo, bZ3, xQ, 9p1, wNdのようなBase-62ナンバリングシステムを構築できます。そのようなファイル形式が存在するのですか、そうした方法で配列をエンコードしてデコードできるJavaScriptツールがありますか?

+0

'ベース62番のsystem'は - あなたがbase64のを聞いたことがある - 、あなたはこの –

+0

これらの整数のための伝統的なbase64の技術を使用していないだろうが...値の範囲は何ですか? –

+0

@JaromandaX私はそれらを-100,000から100,000に制限しています – Marquizzo

答えて

3

私はあなたが整数の配列を作成し、それをバイナリに変換し、次にそのブロブをアップロードすることができると信じています。各整数は4バイトとなります。

var count = 14.5 * 1000000; 
var integers = new Int32Array(count); 
var min = -100000; 
var max = 100000; 

for (var i = 0; i < count; i++) { 
    integers[i] = Math.floor(Math.random() * (max - min)) + min; 
} 

var blob = new Blob([integers]); 

var data = new FormData(); 
data.append('data', blob); 

$.ajax({ 
    type: 'POST', 
    url: '/some_page', 
    data: data, 
    processData: false, 
    contentType: false 
}).done(function(data) { 
    // TODO 
}); 
+0

うーん...これはうまくいくかもしれません!私がデータを投稿するとき、私はそれを格納するためのPHPスクリプトを書くことができます。 .binファイルに保存するファイル形式は何ですか? – Marquizzo

+0

そのまま保存すると、フォーマットはバイナリ(生のバイト、各4バイトのセットはちょうどあなたの整数の1つになります)になります。好きなファイル拡張子を使うことができます。 .binや.datは一般的なものに適しています。一時ファイルの場合は.tmpです。生データをアップロードした後、より有用なフォーマットに加工することができます。 CSV形式やJSONなどで書き直したり、DBなどに挿入する –