我想用Java写数据,然后通过Javascript读回来。目前我使用的是json,但是由于一个巨大的数组(双精度),这种方法很慢(解析和网络)。
什么是一个好的替代方案?我找到了massage pack,但对于我正在尝试做的事情来说,这似乎有点过头了。我宁愿使用像base64这样的简单解决方案,但无法使其在javascript阅读站点上工作。或者我应该使用"charset=x-user-defined method"?(它是不是更高效?)
发布于 2012-11-05 04:01:08
嗯,我对现有的解决方案并不满意(使用简单的json时,要么开销太大,要么太慢)。因此,在这里,对于记录,html5解决方案通过“arraybuffer”
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
发布于 2012-11-04 19:55:49
您可以尝试使用protobufs。目前还没有正式的Javascript实现,但(至少)有几个第三方实现:Google Protocol Buffers - JavaScript
Protobufs被认为不仅速度快,而且比JSON和XML具有更紧凑(非文本)的表示。
https://stackoverflow.com/questions/13217883
复制相似问题