首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效地在Java中序列化数据并使用Javascript读取

问高效地在Java中序列化数据并使用Javascript读取
EN

Stack Overflow用户
提问于 2012-11-04 18:51:00
回答 2查看 1.6K关注 0票数 2

我想用Java写数据,然后通过Javascript读回来。目前我使用的是json,但是由于一个巨大的数组(双精度),这种方法很慢(解析和网络)。

什么是一个好的替代方案?我找到了massage pack,但对于我正在尝试做的事情来说,这似乎有点过头了。我宁愿使用像base64这样的简单解决方案,但无法使其在javascript阅读站点上工作。或者我应该使用"charset=x-user-defined method"?(它是不是更高效?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-05 04:01:08

嗯,我对现有的解决方案并不满意(使用简单的json时,要么开销太大,要么太慢)。因此,在这里,对于记录,html5解决方案通过“arraybuffer”

代码语言:javascript
复制
    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();

要使用跨域策略,您需要在服务器端(“*”)和客户端(jQuery.support.cors = (response.setHeader("Access-Control-Allow-Origin",)上启用它。这里是一个使用DataOutputStream的简单Java servlet的full working example。作为替代方案,还有json回退。

另一种方法是将所有数字编码为字符串,然后将其放入json中(通过base64)。

我偶然发现的另一个有趣的项目是http://binaryjs.com

票数 0
EN

Stack Overflow用户

发布于 2012-11-04 19:55:49

您可以尝试使用protobufs。目前还没有正式的Javascript实现,但(至少)有几个第三方实现:Google Protocol Buffers - JavaScript

Protobufs被认为不仅速度快,而且比JSON和XML具有更紧凑(非文本)的表示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13217883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档