ç¶ Webapp æäºè¦é »ãé³é »æä½ï¼åç¨ WebSocket åååå§è³æçççåè½èè®å¾è¶ä¾è¶å¼·å¤§ï¼è® JavaScript 代碼å¯ä»¥å¿«éãç°¡å®å°æä½åå§äºé²å¶è³æç好èå°±è¶ä¾è¶æé¡¯ã以åå¯ä¸çè§£æ³æ¯è¦åå§è³æçºåä¸²ä¸¦ç¨ charCodeAt()
æ¹æ³è®åè³æç·©è¡çä½å
çµã
ç¶èï¼ç±æ¼éè¦å¤æ¬¡åå¥è½æï¼ç¹å¥æ¯äºé²å¶è³æä¸¦é以ä½å çµè¨ç®ï¼å¦ 32 ä½å æ´æ¸ææµ®é»æ¸ï¼ï¼éåè§£æ³æ¢æ ¢å容æç¼çé¯èª¤ã
JavaScript åå¥é£åæä¾äºååäºé²å¶è³ææ´ææççæ©å¶ã
åå¥é£åä¸è©²èä¸è¬çé£åææ··ï¼ç¶å°åå¥é£åå¼å«Array.isArray()
ææåå³false
ãæ¤å¤ï¼ä¸è¬é£åææä¾çæ¹æ³ä¸¦éå
¨é¨è¢«åå¥é£åææ¯æ´(å¦ push 以å pop æ¹æ³)
çºäºè¿½æ±æå¤§ç坿æ§èæçï¼JavaScript åå¥é£åç實ä½åçºç·©è¡èè¦åãä¸åç·©è¡ï¼ä»¥é¡å¥ ArrayBuffer
實ä½ï¼çºä»£è¡¨ä¸å¡è³æè³æçç©ä»¶ï¼å®æ²æä»»ä½æ ¼å¼ï¼ä¹æ²æä»»ä½ååå
¶å
§å®¹çæ©å¶ãæ³ååä¸åç·©è¡æä½çè¨æ¶é«å¿
é ç¨ä¸åè¦åãä¸åè¦åæä¾äºä¸ç¨®åå¾éä¿ â è³æåå¥ãèµ·å§åç§»èå
ç´ çæ¸ç® â 使å¾è³æè®æç實çåå¥é£åãè¦å以é¡å¥ ArrayBufferView
èå
¶åé¡å¥å¯¦ä½ã
ArrayBuffer
æ¯ä¸ç¨®è³æåæ
ï¼ç¨æ¼è¡¨ç¤ºéç¨çåºå®é·åº¦äºé²å¶è³æç·©è¡åã ä½ ä¸è½ç´æ¥æä½ ArrayBuffer
çå
§å®¹ã使¯ï¼ä½ å¯ä»¥å»ºç«ä¸ååå¥é£åè¦å (typed array view) æä¸å DataView
ï¼å®ä»¥ç¹å®æ ¼å¼ä»£è¡¨ç·©è¡åï¼ä¸¦ä½¿ç¨å®è®åå寫å
¥ç·©è¡åçå
§å®¹ã
åå¥é£åè¦åå
·æèªè¿°æ§å稱ï¼ä¸¦çºææå¸¸ç¨çæ¸åé¡åï¼å¦ Int8
, Uint32
, Float64
çï¼æä¾è¦åã æä¸åç¹æ®çåå¥é£åè¦å Uint8ClampedArray
ã å®çç¯åå¼å¨ 0 å° 255 ä¹éãå®å°æ¼ Canvas çè³æèçé常æç¨ã
Int8Array
-128 to 127 1 8-bit two's complement signed integer byte
int8_t
Uint8Array
0 to 255 1 8-bit unsigned integer octet
uint8_t
Uint8ClampedArray
0 to 255 1 8-bit unsigned integer (clamped) octet
uint8_t
Int16Array
-32768 to 32767 2 16-bit two's complement signed integer short
int16_t
Uint16Array
0 to 65535 2 16-bit unsigned integer unsigned short
uint16_t
Int32Array
-2147483648 to 2147483647 4 32-bit two's complement signed integer long
int32_t
Uint32Array
0 to 4294967295 4 32-bit unsigned integer unsigned long
uint32_t
Float32Array
1.2x10^-38 to 3.4x10^38 4 32-bit IEEE floating point number ( 7 significant digits e.g. 1.1234567) unrestricted float
float
Float64Array
5.0x10^-324 to 1.8x10^308 8 64-bit IEEE floating point number (16 significant digits e.g. 1.123...15) unrestricted double
double
DataView
The DataView
is a low-level interface that provides a getter/setter API to read and write arbitrary data to the buffer. This is useful when dealing with different types of data, for example. Typed array views are in the native byte-order (see Endianness) of your platform. With a DataView
you are able to control the byte-order. It is big-endian by default and can be set to little-endian in the getter/setter methods.
FileReader.prototype.readAsArrayBuffer()
The FileReader.prototype.readAsArrayBuffer()
method starts reading the contents of the specified Blob
or File
.
XMLHttpRequest.prototype.send()
XMLHttpRequest
instances' send()
method now supports typed arrays and ArrayBuffer
objects as argument.
ImageData.data
Is a Uint8ClampedArray
representing a one-dimensional array containing the data in the RGBA order, with integer values between 0
and 255
inclusive.
å ä¾å»ºç«ä¸å 16 ä½å çµçç·©è¡ï¼
var buffer = new ArrayBuffer(16);
å¨éåæåï¼æåæä½å çµå ¨é¨åå§çº 0 çä¸å¡è¨æ¶é«ï¼ä½æ¯ç¨å®åä¸äºä»éº¼äºãæååªè½ç¢ºèªå®çç¢ºæ¯ 16 çä½å çµçé·åº¦ï¼
if (buffer.byteLength === 16) {
console.log("æ²é¯ï¼æ¯ 16 åä½å
çµã");
} else {
console.log("ç³ç³ï¼é·åº¦ä¸å°ï¼");
}
è¦ç¨éåç·©è¡æé»è±æ¨£ä¹åï¼å»ºç«ä¸åè¦åæ¯å¿ éçãä¾å»ºç«ä¸åè¦åæéåç·©è¡ç¶ä½ 32 ä½å çæç¬¦èæ´æ¸ï¼
var int32View = new Int32Array(buffer);
鿍£å°±å¯ä»¥æå®ç¶ä½ä¸è¬çé£å以å忬ä½ï¼
for (var i = 0; i < int32View.length; i++) {
int32View[i] = i * 2;
}
éæææ¤é£åçå忬ä½ä»¥ 0ã2ã4ã6 填滿ï¼åå 4 ä½å çµï¼ç¸½å ± 16 ä½å çµï¼ã
åä¸ä»½è³æçå¤åè¦åèæ ®å¨åä¸ä»½è³æä¸å»ºç«å¤åè¦åçæè¶£æ å½¢ãèä¾ä¾èªªï¼ç¹¼çºä½¿ç¨ä¸é¢ç代碼ï¼
var int16View = new Int16Array(buffer);
for (var i = 0; i < int16View.length; i++) {
console.log("Entry " + i + ": " + int16View[i]);
}
éç¶è©²ç·©è¡ä¸å·²æä¸å 32 ä½å çè¦åï¼é裡建ç«äºåä¸åç·©è¡ä¸ç 16 ä½å æ´æ¸è¦åï¼é裡ç輸åºçº 0, 0, 2, 0, 4, 0, 6, 0ã
ç¹¼çºèæ ®éç¨®æ æ³ï¼
int16View[0] = 32;
console.log("ç¾å¨32ä½å
é£åçæ¬ä½0æ¯" + int32View[0]);
輸åºçº"ç¾å¨ 32 ä½å é£åçæ¬ä½ 0 æ¯ 32"ãä¹å°±æ¯ï¼éå ©åé£åççæ¯åä¸åè³æç·©è¡çå¨ä¸åæ ¼å¼ä¸ççæ³ãå ¶ä» view types 乿¯åæ¨£çæ å½¢ã
èçè¤éçè³æçµæ§å¨å®ä¸åç·©è¡ä½¿ç¨ä¸ååå¥ãä¸åèµ·å§åç§»çå¤åè¦å以æä½è³æç©ä»¶å«æçå¤åè³æåå¥ãéåæ¹æ³å¯ä»¥ç¨å¨ä½¿ç¨ WebGL ãè³ææªæ¡ãjs-ctypes æéå°çè¤éçè³æçµæ§ã
èæ ®éå C çµæ§ï¼
struct someStruct {
unsigned long id;
char username[16];
float amountDue;
};
å¯ä»¥ç¨ä»¥ä¸æ¹æ³åå嫿éç¨®è³ææ ¼å¼çç·©è¡ï¼
var buffer = new ArrayBuffer(24);
// ... å°è³æè®å
¥ç·©è¡ ...
var idView = new Uint32Array(buffer, 0, 1);
var usernameView = new Uint8Array(buffer, 4, 16);
var amountDueView = new Float32Array(buffer, 20, 1);
èä¾ä¾èªªï¼å¯ä»¥ç¨ amountDueView[0]
åå amountDueã
åè¨»ï¼ C çµæ§çè³æçµæ§å°é½æ¯è使ç¨å¹³å°æéï¼é å°å¿éäºå¡«å ä¸çå·®ç°ã
Conversion to normal arraysAfter processing a typed array, it is sometimes useful to convert it back to a normal array in order to benefit from the Array
prototype. This can be done using Array.from
, or using the following code where Array.from
is unsupported.
var typedArray = new Uint8Array([1, 2, 3, 4]),
normalArray = Array.prototype.slice.call(typedArray);
normalArray.length === 4;
normalArray.constructor === Array;
åè¦
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4