JavaScript íìí ë°°ì´(typed array)ì ë°°ì´ê°ì ê°ì²´ì´ê³ ìì(raw) ì´ì§ ë°ì´í°ì ì¡ì¸ì¤í기 ìí ë©ì»¤ëì¦ì ì ê³µí©ëë¤. ì´ë¯¸ ììë¤ìí¼, Array
ê°ì²´ë ëì ì¼ë¡ ëìë¤ ì¤ê³ ì´ë¤ JavaScript ê°ì´ë ê°ì§ ì ììµëë¤. JavaScript ìì§ì ì´ë¬í ë°°ì´ì´ 빨ë¼ì§ëë¡ ìµì í를 ìíí©ëë¤. ê·¸ë¬ë, audio ë° video ì¡°ìê³¼ ê°ì ê¸°ë¥ ì¶ê°, WebSocketì ì¬ì©í ìì ë°ì´í°ì ì¡ì¸ì¤ ë± ì¹ ì´í리ì¼ì´ì
ì´ ì ì ë ê°ë ¥í´ì§ì ë°ë¼, ë¹ ë¥´ê³ ì½ê² íìí ë°°ì´ì ìì ì´ì§ ë°ì´í°ë¥¼ ì¡°ìí ì ìê² íë ê²ì´ JavaScript ì½ëì ëìì´ ë ëê° ììì´ ë¶ëª
í´ ì¡ìµëë¤.
ê·¸ë¬ë, íìí ë°°ì´ì ë³´íµ ë°°ì´ê³¼ í¼ëëì§ë ììµëë¤, íìí ë°°ì´ì Array.isArray()
í¸ì¶ì false
를 ë°íí기ì. ê²ë¤ê°, ë³´íµ ë°°ì´ì ì´ì©í ì ìë 모ë ë©ìëê° íìí ë°°ì´ì ìí´ ì§ìëì§ë ììµëë¤(ê°ë ¹ push ë° pop).
ìµë ì ì°ì± ë° í¨ì¨ì ë¬ì±í기 ìí´, JavaScript íìí ë°°ì´ì 구íì ë²í¼ ë° ë·°ë¡ ëëëë¤. ë²í¼ (ArrayBuffer
ê°ì²´ì ìí´ êµ¬íë¨)ë ë°ì´í° ë¶ë¶(chunk, ë©ì´ë¦¬)ì ëíë´ë ê°ì²´ì
ëë¤; ì´ì¼ê¸° í íìì´ ìì¼ë©°, ê·¸ ì½í
ì¸ ì ì¡ì¸ì¤í기 ìí ë©ì»¤ëì¦ì ì ê³µíì§ ììµëë¤. ë²í¼ì í¬í¨ë ë©ëª¨ë¦¬ì ì¡ì¸ì¤í기 ìí´, 뷰를 ì¬ì©í íìê° ììµëë¤. ë·°ë 문맥(context, ì¦ ë°ì´í° í, ìì ì¤íì
ë° ìì ì)ì ì ê³µí´ ë°ì´í°ë¥¼ ì¤ì íìí ë°°ì´ë¡ ë°ê¿ëë¤.
ArrayBuffer
ë ì¼ë° ê³ ì ê¸¸ì´ ì´ì§ ë°ì´í° ë²í¼ë¥¼ ëíë´ë ë° ì¬ì©ëë ë°ì´í° íì
ëë¤. ArrayBuffer
ì½í
ì¸ ë¥¼ ì§ì ì¡°ìí ìë ììµëë¤; ëì ì, íìí ë°°ì´ ë·° ëë í¹ì íìì¼ë¡ ë²í¼ë¥¼ ëíë´ë 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
-3.4E38
to 3.4E38
and 1.2E-38
is the min positive number 4 32-bit IEEE floating point number (7 significant digits e.g., 1.123456
) unrestricted float
float
Float64Array
-1.8E308
to 1.8E308
and 5E-324
is the min positive number 8 64-bit IEEE floating point number (16 significant digits e.g., 1.123...15
) unrestricted double
double
BigInt64Array
-2^63
to 2^63 - 1
8 64-bit two's complement signed integer bigint
int64_t (signed long long)
BigUint64Array
0
to 2^64 - 1
8 64-bit unsigned integer bigint
uint64_t (unsigned long long)
DataView
DataView
ë ë²í¼ì ìì ë°ì´í°ë¥¼ ì½ê³ ì°ê¸° ìí´ getter/setter API를 ì ê³µíë ì ë 벨 ì¸í°íì´ì¤ì
ëë¤. ì를 ë¤ì´, ìë¡ ë¤ë¥¸ ì íì ë°ì´í°ë¥¼ ì²ë¦¬íë ê²½ì° ì ì©í©ëë¤. íìí ë°°ì´ ë·°ë íë«í¼ì 본ë(native) ë°ì´í¸ ìì(byte-order, Endianness 참조)ì ìí©ëë¤. DataView
ë¡ ë°ì´í¸ ìì를 ì ì´í ì ììµëë¤. 기본ì¼ë¡ big-endianì´ê³ getter/setter ë©ìëë¡ little-endianì¼ë¡ ì¤ì ë ì ììµëë¤.
FileReader.prototype.readAsArrayBuffer()
FileReader.prototype.readAsArrayBuffer()
ë©ìëë ì§ì ë Blob
ëë File
ì ì½í
ì¸ ë¥¼ ì½ê¸° ììí©ëë¤.
XMLHttpRequest.prototype.send()
XMLHttpRequest
ì¸ì¤í´ì¤ì send()
ë©ìëë ì´ì íìí ë°°ì´ ë° ì¸ìë¡ ArrayBuffer
ê°ì²´ë¥¼ ì§ìí©ëë¤.
ImageData.data
0
ìì 255
ê¹ì§ ì ìê°ì¼ë¡ RGBA ì ë°ì´í°ë¥¼ í¬í¨íë 1ì°¨ì ë°°ì´ì ëíë´ë Uint8ClampedArray
ì
ëë¤.
ì°ì , ì¬ê¸°ì 16ë°ì´í¸ ê³ ì 길ì´ë¡ ë²í¼ë¥¼ ë§ë¤ì´ì¼ í©ëë¤:
var buffer = new ArrayBuffer(16);
ì´ ìì ìì, ë°ì´í¸ê° 모ë 0ì¼ë¡ 미리 ì´ê¸°íë ë©ëª¨ë¦¬ ë©ì´ë¦¬ê° ììµëë¤. ê·¸ë ì§ë§ ì´ê±° ê°ì§ê³ í ì ìë ê² ë§ì§ ììµëë¤. ì¤ì 16ë°ì´í¸ 길ì´ì¸ì§ íì¸í ì ìê³ ëëµ ê·¸ë° ì ëì ëë¤:
if (buffer.byteLength === 16) {
console.log("Yes, it's 16 bytes.");
} else {
console.log("Oh no, it's the wrong size!");
}
ì ë§ ì´ ë²í¼ë¡ ìì í ì ì기 ì ì, 뷰를 ë§ë¤ì´ì¼ í©ëë¤. 32ë¹í¸ ë¶í¸ìë ì ì ë°°ì´ë¡ ë²í¼ì ë°ì´í°ë¥¼ ë¤ë£¨ë 뷰를 ë§ëìë¤:
var int32View = new Int32Array(buffer);
ì´ì ë³´íµ ë°°ì´ì²ë¼ ë°°ì´ ë´ íëì ì¡ì¸ì¤í ì ììµëë¤:
for (var i = 0; i < int32View.length; i++) {
int32View[i] = i * 2;
}
ì´ë ë°°ì´ì 4í목ì ê° 0, 2, 4 ë° 6ì¼ë¡ ì±ìëë¤ (4íëª©ì´ ê°ê° 4ë°ì´í¸ì ì´ 16ë°ì´í¸ê° ë©ëë¤).
ê°ì ë°ì´í°ì ì¬ë¬ ë·°ìí©ì ë¹ì ì´ ê°ì ë°ì´í°ì ì¬ë¬ 뷰를 ë§ë¤ ì ììì ê³ ë ¤íë ê²½ì° ì ë§ í¥ë¯¸ë¡ìì§ê¸° ììí©ëë¤. ì를 ë¤ì´, ì ì½ëê° ì£¼ì´ì§ë©´ ë¤ìê³¼ ê°ì´ ê³ìí ì ììµëë¤:
var int16View = new Int16Array(buffer);
for (var i = 0; i < int16View.length; i++) {
console.log("Entry " + i + ": " + int16View[i]);
}
ì¬ê¸°ì ì°ë¦¬ë 기존 32ë¹í¸ ë·°ì ê°ì ë²í¼ë¥¼ ê³µì íë 16ë¹í¸ ì ì 뷰를 ë§ë¤ê³ 16ë¹í¸ ì ìë¡ ë²í¼ ë´ ëª¨ë ê°ì ì¶ë ¥í©ëë¤. ì´ì ì°ë¦¬ë ì¶ë ¥ 0, 0, 2, 0, 4, 0, 6, 0ì ì»ìµëë¤.
ê·¸ë ì§ë§ í ë¨ê³ ë ìì¼ë¡ ê° ì ììµëë¤. ë¤ìì ìê°í´ ë³´ì¸ì:
int16View[0] = 32;
console.log("Entry 0 in the 32-bit array is now " + int32View[0]);
ì´ë¡ë¶í° ì¶ë ¥ì "Entry 0 in the 32-bit array is now 32"ì ëë¤. ì¦, ë ë°°ì´ì íì¤í ê·¸ì ê°ì ë°ì´í° ë²í¼ ìì ë·°ì ëë¤, ë²í¼ë¥¼ ìë¡ ë¤ë¥¸ íìì¼ë¡ ë¤ë£¨ë. 모ë ë·° ì íì¼ë¡ ì´ë¥¼ í ì ììµëë¤.
ë³µì¡í ë°ì´í° 구조(ì²´)ì ìì í기ë¨ì¼ ë²í¼ë¥¼ ìë¡ ë¤ë¥¸ íì¸ ì¬ë¬ ë·°(ë²í¼ ë´ ìë¡ ë¤ë¥¸ ì¤íì ìì ììíë)ì ê²°í©ìì¼, ì¬ë¬ ë°ì´í° íì í¬í¨íë ë°ì´í° ê°ì²´ì ìí¸ ìì©í ì ììµëë¤. ì를 ë¤ì´, ì´ë WebGL, ë°ì´í° íì¼ ëë js-ctypes를 ì°ë ëì ì¬ì©í´ì¼ íë C 구조체ìì ë³µì¡í ë°ì´í° 구조ì ìí¸ ìì©ì¼ í©ëë¤.
ì´ 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]
ë¡ ì§ë¶í ìê¸(amount due)ì ì¡ì¸ì¤í ì ììµëë¤.
ì°¸ê³ : C 구조체ìì ë°ì´í° 구조 ì ë ¬ì íë«í¼ì ìì¡´í©ëë¤. ì´ë¬í í¨ë©(padding) ì°¨ì´ì ëí´ ì¡°ì¬íê³ ê³ ë ¤íì¸ì.
ë³´íµ ë°°ì´ë¡ ë³ííìí ë°°ì´ì ì²ë¦¬í ë¤, ëëë¡ Array
íë¡í íì
ì ëìì ë°ê¸° ìí´ ë³´íµ ë°°ì´ë¡ ë¤ì ë³ííë ê² ì ì©í©ëë¤. ì´ë Array.from
ëë Array.from
ì´ ì§ìëì§ ìë ê²½ì° ë¤ì ì½ë를 ì¬ì©íì¬ ìíí ì ììµëë¤.
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