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?

Share Improve this question edited Nov 17, 2018 at 18:28 Berk7871 asked Nov 17, 2018 at 18:04 Berk7871Berk7871 3211 gold badge3 silver badges15 bronze badges 1
  • Show us what you have tried and where you are running into problems – charlietfl Commented Nov 17, 2018 at 18:33
Add a ment  | 

2 Answers 2

Reset to default 2

You 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