admin管理员组文章数量:1327695
I'm working with javascript code on the client side of a web site to parse mixed string/raw data, received by means of a JSON object via http POST response.
Some of the fields of that JSON object are texts/numbers, but the biggest and most important field (performance wise) are a raw field posed of raw data (octets).
How do I cast that field to a Float64Array()
object, so I can parse the data, using pure modern javascript, with performance in mind?
I'm working with javascript code on the client side of a web site to parse mixed string/raw data, received by means of a JSON object via http POST response.
Some of the fields of that JSON object are texts/numbers, but the biggest and most important field (performance wise) are a raw field posed of raw data (octets).
How do I cast that field to a Float64Array()
object, so I can parse the data, using pure modern javascript, with performance in mind?
- Show us what you have tried and where you are running into problems – charlietfl Commented Nov 17, 2018 at 18:33
2 Answers
Reset to default 2You can check stackoverflow answer may this help you. Or try to pass raw data in base64 encode in php and decode js for example:-
/ Create Base64 Object
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
// Define the string
var string = 'Hello World!';
// Encode the String
var encodedString = Base64.encode(string);
console.log(encodedString); // Outputs: "SGVsbG8gV29ybGQh"
// Decode the String
var decodedString = Base64.decode(encodedString);
console.log(decodedString); // Outputs: "Hello World!"
if it doesn't work tell me i will create one example of this functionality HAPPY CODING
For browsers that support it, your best bet for raw performance may be the Encoding API. However, I wasn't able to find any way to make that API support raw binary mixed in among a larger JSON object.
You might also find this answer pertaining to TextEncoder helpful, although due to encoding issues I wasn't able to find any way to apply it directly to this situation.
So with those caveats, the best method I've been able to find so far for this particular situation is to just manually read the string into an ArrayBuffer and then view it as a FloatArray, based on this Google blog post:
function stringToFloat64Array(str) {
var buffer = new ArrayBuffer(str.length); // 1 byte per char
var view = new Uint8Array(buffer);
for (var i=str.length-1; i>=0; i--) {
view[i] = str.charCodeAt(i);
}
return new Float64Array(buffer, 0, str.length / 8); // 8 bytes per float
}
var json = {
"somenumber": 3,
"raw": "\x66\x66\x66\x66\x66\x66\x14\x40\x00\x00\x00\x00\x00\x00\x00\xc0"
}; // From JSON.parse
var floatArray = stringToFloat64Array(json.raw);
console.log(floatArray); // Float64Array [ 5.1, -2 ]
本文标签: javascriptBinary data inside JSONStack Overflow
版权声明:本文标题:javascript - Binary data inside JSON - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742215860a2434553.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论