2

Javaでデータを書き込み、Javascriptで読み戻したいと思います。現在、私はjsonを使用していますが、(doubleの)1つの巨大な配列のため、このアプローチは低速です(解析とネットワーク)。

良い選択肢は何ですか?マッサージパックを見つけましたが、これは私がやろうとしていることには少しやり過ぎのようです。base64のような単純なソリューションを使用したいのですが、JavaScriptの読み取りサイトで機能させることができませんでした。または、「charset = x-user-definedメソッド」を使用する必要がありますか?(より効率的ですか?)

4

2 に答える 2

0

ええと、私は既存のソリューションに満足していませんでした(単純なjsonを使用すると、オーバーヘッドが大きくなるか、遅すぎるかのどちらかです)。したがって、ここでは、レコードについて、「arraybuffer」を介したhtml5ソリューション

    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function(e) {
        if (this.status == 200) {
            var dv = new DataView(this.response);
            var json = {
                "info" : {
                    "took" : 0
                },
                "route": {
                    "time": 0, 
                    "distance": 0, 
                    "data" : {}
                }
            };

            var i = 0;
            json.info.took = dv.getFloat32(i);                
            i += 4;
            json.route.distance = dv.getFloat32(i);
            i += 4;
            json.route.time = dv.getInt32(i);
            i += 4;
            var locations = dv.getInt32(i);
            var tmpArray = [];
            json.route.data = {
                "type" : "LineString",
                "coordinates": tmpArray
            };
            for(var index = 0; index < locations; index ++) {
                i += 4;
                var lat = dv.getFloat32(i);
                i += 4;
                var lng = dv.getFloat32(i);
                tmpArray.push([lng, lat]);
            }            
            callback(json);
        } else
            errCallback(e);
    };
    xhr.send();

これをクロスオリジンポリシーで機能させるには、サーバー(response.setHeader( "Access-Control-Allow-Origin"、 "*"))とクライアント(jQuery.support.cors = true)で有効にする必要があります。 。ここでは、DataOutputStreamを使用した単純なJavaサーブレットを使用した完全な動作例を示します。別の方法として、jsonフォールバックがあります。

別のアプローチは、すべての数値を文字列にエンコードし、これを(base64経由で)jsonに入れることです。

私が困惑したもう1つの興味深いプロジェクトは、 http: //binaryjs.comでした。

于 2012-11-04T20:01:08.027 に答える
0

あなたはprotobufsを試すことができます。Javascriptの公式の実装はありませんが、(少なくとも)いくつかのサードパーティの実装があり ます。GoogleProtocol Buffers-JavaScript

Protobufsは、JSONやXMLよりも高速であり、よりコンパクトな(非テキスト)表現であると言われています。

于 2012-11-04T11:55:48.930 に答える