我想用Java編寫數據並通過Javascript讀取數據。目前我使用json,但由於一個巨大的數組(雙打),這種方法很慢(解析和網絡)。在Java中高效地序列化數據並用Javascript讀取
什麼是一個很好的選擇?我發現massage pack,但這似乎有點矯枉過正,我想要做的事情。我寧願使用像base64這樣的簡單解決方案,但無法使其在JavaScript閱讀網站上工作。或者我應該使用「charset=x-user-defined method」? (效率更高嗎?)
我想用Java編寫數據並通過Javascript讀取數據。目前我使用json,但由於一個巨大的數組(雙打),這種方法很慢(解析和網絡)。在Java中高效地序列化數據並用Javascript讀取
什麼是一個很好的選擇?我發現massage pack,但這似乎有點矯枉過正,我想要做的事情。我寧願使用像base64這樣的簡單解決方案,但無法使其在JavaScript閱讀網站上工作。或者我應該使用「charset=x-user-defined method」? (效率更高嗎?)
那麼,我不滿意現有的解決方案(使用簡單的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(「訪問控制 - 允許 - Origin「,」*「))和客戶端(jQuery.support.cors = true)。這裏的full working example用一個簡單的Java servlet使用DataOutputStream。作爲替代方案,還有json後備。
另一種方法是將所有數字編碼成一個字符串,並將其放入一個json(通過base64)。
我另一個令人感興趣的項目是http://binaryjs.com
你可以試試protobufs。 Javascript沒有正式的實現,但是至少有一些第三方的實現:Google Protocol Buffers - JavaScript
protobufs被認爲是快速的,並且具有更緊湊(非文本)表示JSON和XML。
謝謝。也是在雷達上,但我寧願更容易或至少更正式的版本。 – Karussell
你想發送什麼類型的數據? JSON通常是一個很好的選擇,與HTTP壓縮相結合。 – Bergi
如上所述:一個簡單的Json,帶有非常大的浮點數/雙精度的數組 – Karussell
@Bergi我需要在Javascript端啓用http壓縮的json來啓用什麼? – Karussell