我想用 Java 编写数据并通过 Javascript 读回。目前我正在使用 json 但由于一个巨大的数组(双打),这种方法很慢(解析和网络)。
什么是好的选择?我找到了按摩包,但这对于我正在尝试做的事情似乎有点矫枉过正。我宁愿使用像 base64 这样的简单解决方案,但无法使其在 javascript 阅读网站上运行。还是我应该使用“ charset=x-user-defined method ”?(效率更高吗?)
我想用 Java 编写数据并通过 Javascript 读回。目前我正在使用 json 但由于一个巨大的数组(双打),这种方法很慢(解析和网络)。
什么是好的选择?我找到了按摩包,但这对于我正在尝试做的事情似乎有点矫枉过正。我宁愿使用像 base64 这样的简单解决方案,但无法使其在 javascript 阅读网站上运行。还是我应该使用“ charset=x-user-defined method ”?(效率更高吗?)
你可以试试protobufs。Javascript 没有官方实现,但(至少)有几个 3rd-party 实现: Google Protocol Buffers - JavaScript
与 JSON 和 XML 相比,Protobufs 被认为既快速又具有更紧凑(非文本)的表示形式。
好吧,我对现有的解决方案不满意(使用简单 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 servlet的完整工作示例。作为替代方案,还有 json 后备。
另一种方法是将所有数字编码为字符串并将其放入 json(通过 base64)。
我偶然发现的另一个有趣的项目是http://binaryjs.com