ì¹ ê°ë°ìì íì¼ ìì±, ì ë¡ë, ë¤ì´ë¡ë를 ì²ë¦¬í ë ì´ì§ ë°ì´í°ë¥¼ ì£¼ë¡ ì¬ì©í©ëë¤. ì´ë¯¸ì§ ì²ë¦¬ ëí ëíì ì¸ ì´ì§ ë°ì´í° ì¬ì© ì¬ë¡ ì¤ íëì ëë¤.
ìë°ì¤í¬ë¦½í¸ììë ì´ ëª¨ë ìì ì´ ê°ë¥íë©° ì´ì§ ì°ì°ììë ë°ì´ë ì±ë¥ì ë³´ì¬ì¤ëë¤.
ë¤ë§ ìëì ê°ì ë¤ìí í´ëì¤ë¡ ì¸í´ ì½ê° í¼ëì¤ë¬ì¸ ì ììµëë¤.
ArrayBuffer,Uint8Array,DataView,Blob,Fileë±
ìë°ì¤í¬ë¦½í¸ìì ì´ì§ ë°ì´í°ë ë¤ë¥¸ íë¡ê·¸ëë° ì¸ì´ì ë¹í´ íì¤ì ì´ì§ ìì ë°©ìì¼ë¡ 구íëì´ ììµëë¤. íì§ë§ ê°ë ì íëì© ì 리íê³ ëë©´ 꽤 ë¨ìíê² ì´í´í ì ììµëë¤.
ê°ì¥ ê¸°ë³¸ì´ ëë ì´ì§ ê°ì²´ë ArrayBufferì
ëë¤. ArrayBufferë ê³ ì 길ì´ì ì°ìë ë©ëª¨ë¦¬ ììì 참조í©ëë¤.
ë¤ìê³¼ ê°ì´ ArrayBuffer를 ìì±í ì ììµëë¤.
let buffer = new ArrayBuffer(16); // 길ì´ê° 16ë°ì´í¸ì¸ ë²í¼ ìì±
alert(buffer.byteLength); // 16
ì´ ì½ëë 16ë°ì´í¸ì ì°ìë ë©ëª¨ë¦¬ ê³µê°ì í ë¹íê³ 0ì¼ë¡ 미리 ì±ìëë¤.
ArrayBufferë ë°°ì´ì´ ìëëë¤.í¼ëí ì ìë ë¶ë¶ì 먼ì ì§ê³ ëì´ê°ìë¤. ArrayBufferë Arrayì ì í ê³µíµì ì´ ììµëë¤.
ArrayBufferë 길ì´ê° ê³ ì ëì´ ìì´, ë리거ë ì¤ì¼ ì ììµëë¤.ArrayBufferë ë©ëª¨ë¦¬ìì ì íí ì ì¸ë 길ì´ë§í¼ë§ ì°¨ì§í©ëë¤.- ê°ë³ ë°ì´í¸ì ì ê·¼íë ¤ë©´
buffer[index]ê° ìë ë³ëì âë·°(view)â ê°ì²´ê° íìí©ëë¤.
ArrayBufferë ë©ëª¨ë¦¬ ììì
ëë¤. ì´ ìì ìì ì´ë¤ ê²ì´ ì ì¥ë ê¹ì? ArrayBufferë ìì§ ëª»í©ëë¤. ê·¸ì ê°ê³µëì§ ìì ì¼ë ¨ì ë°ì´í¸ì¼ ë¿ì
ëë¤.
ArrayBuffer를 ì¡°ìí기 ìí´ âë·°â ê°ì²´ê° íìí©ëë¤.
ë·° ê°ì²´ë ìì²´ì ì¼ë¡ ì´ë¤ ê²ë ì ì¥íì§ ìì¼ë©° ArrayBufferì ì ì¥ë ë°ì´í¸ë¥¼ í´ìíë âìê²½â ìí ì ìíí©ëë¤.
ìì:
Uint8ArrayâArrayBufferì ê° ë°ì´í¸ë¥¼ ë³ê°ì ì«ìë¡ ì·¨ê¸í©ëë¤. 1ë°ì´í¸ë 8ë¹í¸ì´ë¯ë¡ 0ë¶í° 255ê¹ì§ì ê°ì ê°ì§ ì ìì¼ë©° ì´ë¬í ê°ì '8ë¹í¸ ë¶í¸ ìë ì ì(8-bit unsigned integer)'ë¼ê³ ë¶ë¦ ëë¤.Uint16Arrayâ 2ë°ì´í¸ë§ë¤ íëì ì ìë¡ ì·¨ê¸í©ëë¤. 0ë¶í° 65535ê¹ì§ì ê°ì ê°ì§ ì ìì¼ë©° ì´ë¬í ê°ì '16ë¹í¸ ë¶í¸ ìë ì ì(16-bit unsigned integer)'ë¼ê³ ë¶ë¦ ëë¤.Uint32Arrayâ 4ë°ì´í¸ë§ë¤ íëì ì ìë¡ ì·¨ê¸í©ëë¤. 0ë¶í° 4294967295ê¹ì§ì ê°ì ê°ì§ ì ìì¼ë©° ì´ë¬í ê°ì '32ë¹í¸ ë¶í¸ ìë ì ì(32-bit unsigned integer)'ë¼ê³ ë¶ë¦ ëë¤.Float64Arrayâ 8ë°ì´í¸ë§ë¤ íëì ë¶ë ììì ì«ìë¡ ì·¨ê¸í©ëë¤.5.0x10-324ë¶í°1.8x10308ê¹ì§ì ê°ì ê°ì§ ì ììµëë¤.
ë°ë¼ì 16ë°ì´í¸ ArrayBufferì ì´ì§ ë°ì´í°ë 16ê°ì âìì ì«ìâ, 8ê°ì ë í° ì«ì(ê° 2ë°ì´í¸), 4ê°ì ë í° ì«ì(ê° 4ë°ì´í¸), ì ë°ëê° ëì ë¶ë ììì ê° 2ê°(ê° 8ë°ì´í¸)ë¡ í´ìí ì ììµëë¤.
ArrayBufferë ì´ì§ ë°ì´í° ì²ë¦¬ì ê·¼ê°ì´ ëë íµì¬ ê°ì²´ì´ë©°, ê°ê³µëì§ ìì ì´ì§ ë°ì´í°ë¥¼ ì ì¥íê³ ììµëë¤.
íì§ë§ ArrayBufferì ê°ì ì°ê±°ë ìíì ê°ì 기본 ì°ì°ì ìííë ¤ë©´ ë¤ìê³¼ ê°ì´ 뷰를 ì¬ì©í´ì¼ í©ëë¤.
let buffer = new ArrayBuffer(16); // 길ì´ê° 16ë°ì´í¸ì¸ ë²í¼ ìì±
let view = new Uint32Array(buffer); // ë²í¼ë¥¼ 32ë¹í¸ ì ìì ì°ìì¼ë¡ ì·¨ê¸
alert(Uint32Array.BYTES_PER_ELEMENT); // ì ì íëë¹ 4ë°ì´í¸
alert(view.length); // 4, ì ì 4ê° ì ì¥ ê°ë¥
alert(view.byteLength); // 16, ì ì²´ ë°ì´í¸ 길ì´
// ê°ì ì ì¥í´ë´
ìë¤.
view[0] = 123456;
// ê°ì ìíí´ë´
ìë¤.
for(let num of view) {
alert(num); // 123456, ê·¸ ë¤ 0, 0, 0 (ì´ 4ê°ì ê°)
}
TypedArray
ì§ê¸ê¹ì§ ì´í´ë³¸ 모ë ë·°(Uint8Array, Uint32Array ë±)를 íµì¹íë ì©ì´ë TypedArrayì
ëë¤. ìì ì´í´ë³¸ ë·°ë¤ì ê°ì ë©ìëì íë¡í¼í°ë¥¼ ê³µì í©ëë¤.
ì°¸ê³ ë¡ TypedArrayë¼ë ìì±ìë ì¡´ì¬íì§ ììµëë¤. TypedArrayë ArrayBufferì ì¬ë¬ 뷰를 ìì¸ë¬ ì§ì¹íë ìì ì©ì´ì
ëë¤. ì를 ë¤ì´ Int8Array, Uint8Array ë±ì´ ìì¼ë©° ì ì²´ 목ë¡ì ê³§ ì´í´ë³´ê² ìµëë¤.
new TypedArrayì ê°ì ííì 본ë¤ë©´ new Int8Array, new Uint8Arrayì ê°ì ë·° ì¤ íë를 ë»íë¤ê³ ì´í´íë©´ ë©ëë¤.
íì ì´ ì§ì ë ë°°ì´(typed array)ì ì¼ë° ë°°ì´ì²ë¼ ì¸ë±ì¤ê° ìê³ ë°ë³µ ê°ë¥(iterable, ì´í°ë¬ë¸)í©ëë¤.
íì
ì´ ì§ì ë ë°°ì´ì ìì±ìë Int8Arrayë Float64Arrayë ìê´ìì´ ì£¼ì´ì§ ì¸ì íì
ì ë°ë¼ ë¤ë¥´ê² ëìí©ëë¤.
5ê°ì§ ë°©ìì¼ë¡ ì¸ì를 ë길 ì ììµëë¤.
new TypedArray(buffer, [byteOffset], [length]);
new TypedArray(object);
new TypedArray(typedArray);
new TypedArray(length);
new TypedArray();
-
ArrayBufferì¸ì를 ì ë¬íë©´ ê·¸ ìì 뷰를 ë°ë¡ ìì±í©ëë¤. ì´ ë¬¸ë²ì ì´ë¯¸ ììì ì¬ì©í´ ë³´ììµëë¤.ì íì ì¼ë¡ ìì ìì¹ë¥¼ ëíë´ë
byteOffset(ê¸°ë³¸ê° 0)ê³¼length(ê¸°ë³¸ê° ë²í¼ì ë)를 ì ê³µíë©´bufferì ì¼ë¶ë¶ë§ ë·°ë¡ ì§ì í ì ììµëë¤. -
Arrayë ì ì¬ ë°°ì´ ê°ì²´(array-like object)를 ì ë¬íë©´ íì ì´ ì§ì ë ë°°ì´ì ëì¼í 길ì´ë¡ ìì±íê³ ë´ì©ì ë³µì¬í©ëë¤.ë¤ìê³¼ ê°ì´ ì¬ì©íì¬ ë°°ì´ì 미리 ê°ì ì±ì ë£ì ì ììµëë¤.
let arr = new Uint8Array([0, 1, 2, 3]); alert( arr.length ); // 4, ëì¼í 길ì´ì ì´ì§ ë°°ì´ì ìì± alert( arr[1] ); // 1, 주ì´ì§ ê°ì¼ë¡ 4ë°ì´í¸ (8ë¹í¸ ë¶í¸ ìë ì ì)를 ì±ì -
ë ë¤ë¥¸
TypedArray를 ì ë¬í´ë ëì¼íê² ëìí©ëë¤. íì ì´ ì§ì ë ë°°ì´ì ëì¼í 길ì´ë¡ ìì±íê³ ê°ì ë³µì¬í©ëë¤. íìíë¤ë©´ ìë¡ì´ íì ì¼ë¡ ë³íí ì ììµëë¤.let arr16 = new Uint16Array([1, 1000]); let arr8 = new Uint8Array(arr16); alert( arr8[0] ); // 1 alert( arr8[1] ); // 232, 1000ì ë³µì¬íë ¤ íì§ë§ 1000ì 8ë¹í¸ì ë´ì ì ììµëë¤(ìë ì¤ëª 참조). -
ì«ì ì¸ì
length를 ì ë¬íë©´ ê·¸ë§í¼ì ìì를 ì ì¥í íì ì´ ì§ì ë ë°°ì´ì ìì±í©ëë¤. ì ì²´ ë°ì´í¸ 길ì´ëlengthê°ì ë¨ì¼ ììì ëí ë°ì´í¸ ì를 ë°ííëTypedArray.BYTES_PER_ELEMENT를 ê³±í ê°ì ëë¤.let arr = new Uint16Array(4); // 4ê°ì ì ì를 ì ì¥í íì ì´ ì§ì ë ë°°ì´ì ìì± alert( Uint16Array.BYTES_PER_ELEMENT ); // ì ì íëë¹ 2ë°ì´í¸ë¡ ì·¨ê¸ alert( arr.byteLength ); // 8 (ì ì²´ ë°ì´í¸ 길ì´) -
ì¸ì를 ì ë¬íì§ ìì¼ë©´ 길ì´ê° 0ì¸ íì ì´ ì§ì ë ë°°ì´ì ë§ëëë¤.
ArrayBuffer ìì´ TypedArray를 ì§ì ìì±í ì ììµëë¤. íì§ë§ ë·°ë ê·¸ 기ë°ì´ ëë ArrayBuffer ìì´ ì¡´ì¬í ì ì기 ë문ì ArrayBuffer를 ì§ì ì ë¬íë 첫 ë²ì§¸ ê²½ì°ë¥¼ ì ì¸íê³ ë ì ê²½ì° ëª¨ë ArrayBufferê° ìëì¼ë¡ ìì±ë©ëë¤.
기ë°ì´ ëë ArrayBufferì ì ê·¼í기 ìí´ TypedArrayì íë¡í¼í°ë¥¼ ì¬ì©í ì ììµëë¤.
bufferâArrayBufferì 참조byteLengthâArrayBufferì 길ì´
ê·¸ë 기ì ìëì ê°ì´ íëì ë·°ìì ë¤ë¥¸ 뷰를 ë§ë¤ ì ììµëë¤.
let arr8 = new Uint8Array([0, 1, 2, 3]);
// ëì¼í ê°ì ê°ì§ ë ë¤ë¥¸ ë·°
let arr16 = new Uint16Array(arr8.buffer);
íì ì´ ì§ì ë ë°°ì´ì 목ë¡ì ë¤ìê³¼ ê°ìµëë¤.
Uint8Array,Uint16Array,Uint32Arrayâ 8ë¹í¸, 16ë¹í¸, 32ë¹í¸ ì ìì ì¬ì©í©ëë¤.Uint8ClampedArrayâ 8ë¹í¸ ì ìì ì¬ì©íë©°, ê°ì í ë¹í ë ê°ì ë²ì를 'ê³ ì (clamp)'í©ëë¤(ìë 참조).
Int8Array,Int16Array,Int32Arrayâ ìì를 í¬í¨í ë¶í¸ ìë ì ìì ì¬ì©í©ëë¤.Float32Array,Float64Arrayâ 32ë¹í¸, 64ë¹í¸ ë¶í¸ ìë ë¶ë ììì ì«ìì ì¬ì©í©ëë¤.
int8ê³¼ ê°ì´ ë¨ì¼ ê°ì ëíë´ë íì
ì ììµëë¤.Int8Arrayë¼ë ì´ë¦ê³¼ ë¬ë¦¬ ìë°ì¤í¬ë¦½í¸ìë intë int8ê³¼ ê°ì ë¨ì¼ ê° íì
ì´ ìë¤ë ê²ì ì ìíì¸ì.
Int8Arrayë ê°ë³ ê°ì ê°ë ë°°ì´ì´ ìë ArrayBuffer ìì ë·°ì
ëë¤.
ë²ì를 ë²ì´ë ê°ì ëì
íì ì´ ì§ì ë ë°°ì´ì ë²ì를 ë²ì´ë ê°ì ì°ë ¤ê³ íë©´ ì´ë»ê² ë ê¹ì? ìë¬ë ë°ìíì§ ììµëë¤. íì§ë§ ë²ì를 ì´ê³¼í ë¹í¸ë ì립ëë¤.
Uint8Arrayì 256ì ë£ëë¤ê³ ìê°í´ ë´
ìë¤. 256ì ì´ì§ ííë 100000000 (9ë¹í¸)ì´ì§ë§ Uint8Arrayë ê° íëë¹ 8ë¹í¸ë§ ì ê³µí기 ë문ì 0ë¶í° 255ê¹ì§ì ê°ë§ ê°ì§ ì ììµëë¤.
ííí ì ìë ê°ì ë²ì를 ì´ê³¼íë ìì ëí´ ì¤ë¥¸ìª½ ëì íì 8ë¹í¸ë§ ì ì¥íê³ ëë¨¸ì§ ë¹í¸ë ì립ëë¤.
ê²°ê³¼ì ì¼ë¡ 0ì´ ëìµëë¤.
ë§ì½ 257ì ë£ì¼ë©´ 257ì ì´ì§ ííë 100000001 (9ë¹í¸)ì´ë¯ë¡ ì¤ë¥¸ìª½ ëì 8ë¹í¸ë§ ì ì¥íì¬ ë°°ì´ì 1ì´ ë¤ì´ê°ëë¤.
ë¤ì ë§í´ ì«ì를 28ë¡ ëë ë머ì§ê° ì ì¥ë©ëë¤.
ìë ì¬ë¡ë¥¼ ì´í´ë´ ìë¤.
let uint8array = new Uint8Array(16);
let num = 256;
alert(num.toString(2)); // 100000000 (ì´ì§ í기ë²)
uint8array[0] = 256;
uint8array[1] = 257;
alert(uint8array[0]); // 0
alert(uint8array[1]); // 1
ì´ ì ìì Uint8ClampedArrayë í¹ë³íê² ëìí©ëë¤. Uint8ClampedArrayë 255ë³´ë¤ í° ì«ìë 255ë¡, ììë 0ì¼ë¡ ì ì¥í©ëë¤. ì´ë¬í ëìì ì´ë¯¸ì§ ì²ë¦¬ì ì ì©í©ëë¤.
TypedArray ë©ìë
TypedArrayë ì¼ë° Array ë©ìë를 ì¬ì©í ì ìì§ë§ ëª ê°ì§ 주목í ë§í ìì¸ê° ì¡´ì¬í©ëë¤.
기본ì ì¼ë¡ TypedArrayë ë°°ì´ì²ë¼ ìííê±°ë map, slice, find, reduce ë©ìë를 ì¬ì©í ì ììµëë¤.
íì§ë§ ë°°ì´ì²ë¼ ëìíì§ ìë ë¶ë¶ë ììµëë¤.
spliceë©ìë를 ì¬ì©í ì ììµëë¤. íì ì´ ì§ì ë ë°°ì´ì ë²í¼ì ëí ë·°ì´ê³ , ë²í¼ë ê³ ì ë ì¼ë ¨ì ë©ëª¨ë¦¬ ììì´ê¸° ë문ì ê°ì 'ì ê±°âí ì ììµëë¤. í ì ìë ì¼ì´ë¼ê³ ë 0ì í ë¹íë ê²ë¿ì ëë¤.concatë©ìë를 ì¬ì©í ì ììµëë¤.
ê·¸ ì¸ì ë ê°ì§ ë©ìëê° ë ììµëë¤.
arr.set(fromArr, [offset])ëfromArrìoffset(ê¸°ë³¸ê° 0) ìì¹ë¶í° 모ë ìì를arrì ë³µì¬í©ëë¤.arr.subarray([begin, end])ëbeginë¶í°endì´ì ê¹ì§ ëì¼í íì ì ìë¡ì´ 뷰를 ìì±í©ëë¤.sliceë©ìëì ì ì¬íì§ë§(sliceë ì§ìí©ëë¤) ë²ì ë´ ìì를 ë³µì¬íì§ ìê³ ë³ëì ìë¡ì´ 뷰를 ìì±í©ëë¤.
ì§ê¸ê¹ì§ 본 ë©ìë를 íµí´ íì ì´ ì§ì ë ë°°ì´ì ë³µì¬íê±°ë ì¡°í©íê³ ê¸°ì¡´ ë°°ì´ìì ìë¡ì´ ë°°ì´ì ìì±íë ë± ì¬ë¬ ìì ì ìíí ì ììµëë¤.
DataView
DataViewë ArrayBuffer ìì ëì´ë í¹ë³íê³ ë§¤ì° ì ì°í âíì
ì´ ìë(untyped)â ë·°ì
ëë¤. DataViewë ììì ì¤íì
ì ìë ë°ì´í°ë¥¼ ìíë íìì¼ë¡ ì½ê³ ì¸ ì ìê² í©ëë¤.
- íì
ì´ ì§ì ë ë°°ì´ììë ìì±ìê° ë°ì´í° íìì ê²°ì í©ëë¤. ë°°ì´ ì ì²´ê° ê°ì íì
ì´ë¼ê³ ê°ì íë©° ië²ì§¸ ì«ìë
arr[i]를 íµí´ ì ê·¼í©ëë¤. DataViewë.getUint8(i)ë.getUint16(i)ì ê°ì ë©ìë를 ì¬ì©íì¬ ë°ì´í°ì ì ê·¼í©ëë¤. ë°ì´í° íìì ìì± ìì ì´ ìë ë©ìë í¸ì¶ ìì ì ê²°ì ë©ëë¤.
문ë²:
new DataView(buffer, [byteOffset], [byteLength])
bufferâ ë·°ì 기ë°ì´ ëëArrayBufferì ëë¤. íì ì´ ì§ì ë ë°°ì´ê³¼ ë¬ë¦¬DataViewë ì¤ì¤ë¡ ìë¡ì´ ë²í¼ë¥¼ ë§ë¤ì§ ì기 ë문ì ì ë¬í ë²í¼ê° íìí©ëë¤.byteOffsetâ ë·°ì ìì ë°ì´í¸ ì§ì (ê¸°ë³¸ê° 0)byteLengthâ ë·°ì ë°ì´í¸ 길ì´(기본ê°bufferì ë)
ì를 ë¤ì´ ìëì ê°ì´ ëì¼í ë²í¼ìì ë¤ë¥¸ ë°ì´í° íìì ì«ì를 ì¶ì¶í ì ììµëë¤.
// 모ë ê°ì´ ìµëê° 255ì¸ 4ë°ì´í¸ ì´ì§ ë°°ì´
let buffer = new Uint8Array([255, 255, 255, 255]).buffer;
let dataView = new DataView(buffer);
// ì¤íì
0ìì 8ë¹í¸ ì«ì를 ê°ì ¸ìµëë¤.
alert( dataView.getUint8(0) ); // 255
// ì¤íì
0ìì 16ë¹í¸ ì«ì를 ê°ì ¸ìµëë¤. ì´ ì«ìë 2ë°ì´í¸ë¡ 구ì±ëë©° ë ë°ì´í¸ë¥¼ í¨ê» í´ìíì¬ 65535ê° ë©ëë¤.
alert( dataView.getUint16(0) ); // 65535 (16ë¹í¸ ë¶í¸ ìë ì ì ì¤ ê°ì¥ í° ê°)
// ì¤íì
0ìì 32ë¹í¸ ì«ì를 ê°ì ¸ìµëë¤.
alert( dataView.getUint32(0) ); // 4294967295 (32ë¹í¸ ë¶í¸ ìë ì ì ì¤ ê°ì¥ í° ê°)
dataView.setUint32(0, 0); // 4ë°ì´í¸ ì«ì를 0ì¼ë¡ ì¤ì íì¬ ëª¨ë ë°ì´í¸ë¥¼ 0ì¼ë¡ ë§ëëë¤.
DataViewë ëì¼í ë²í¼ì ì¬ë¬ ë°ì´í° íìì ë°ì´í°ë¥¼ ì ì¥í ë ì ì©í©ëë¤. ì를 ë¤ì´ 16ë¹í¸ ì ìì 32ë¹í¸ ë¶ë ììì ê°ì í ìì¼ë¡ ë¬¶ì´ ì°ìí´ì ì ì¥í ë, DataView를 ì¬ì©íë©´ ì½ê² ë°ì´í°ì ì ê·¼í ì ììµëë¤.
ìì½
ArrayBufferë ê³ ì 길ì´ì ì°ìë ë©ëª¨ë¦¬ ììì 참조íë íµì¬ ê°ì²´ì
ëë¤.
ArrayBufferì ë°ì´í°ë¥¼ ì¡°ìí기 ìí´ ë·°ê° íìí©ëë¤.
TypedArrayê° ë·°ì ìí ì ìíí©ëë¤.Uint8Array,Uint16Array,Uint32Arrayâ 8ë¹í¸, 16ë¹í¸, 32ë¹í¸ ë¶í¸ ìë ì ìì ì¬ì©í©ëë¤.Uint8ClampedArrayâ 8ë¹í¸ ì ìì ì¬ì©íë©°, ê°ì í ë¹í ë ê°ì 'ê³ ì âí©ëë¤.Int8Array,Int16Array,Int32Arrayâ ìì를 í¬í¨í ë¶í¸ ìë ì ìì ì¬ì©í©ëë¤.Float32Array,Float64Arrayâ 32ë¹í¸, 64ë¹í¸ ë¶í¸ ìë ë¶ë ììì ì«ìì ì¬ì©í©ëë¤.
- ëë
DataViewâDataViewëgetUint8(offset)ê°ì ë©ìëë¡ íìì ì§ì íë ë·°ì ëë¤.
ëë¶ë¶ì ê²½ì° ArrayBuffer를 ë´ë¶ì ê°ì¶ ì± íì
ì´ ì§ì ë ë°°ì´ì ì§ì ìì±íê³ ê°ì ë¤ë£¹ëë¤. ì´ë ArrayBufferë âê³µíµë¶ëª¨(common denominator)â ìí ì í©ëë¤. íìíë¤ë©´ .bufferë¡ ArrayBufferì ì ê·¼íì¬ ë ë¤ë¥¸ 뷰를 ë§ë¤ ì ììµëë¤.
ì´ì§ ë°ì´í°ë¥¼ ë¤ë£¨ë ë©ìë를 ì¤ëª í ë ì¬ì©íë ì©ì´ê° ë ê°ì§ ë ììµëë¤.
ArrayBufferViewë ì´ë° 모ë ì¢ ë¥ì 뷰를 ìì¸ë¬ ì§ì¹íë ìì ì©ì´ì ëë¤.BufferSourceëArrayBufferëëArrayBufferView를 ìì¸ë¬ ì§ì¹íë ìì ì©ì´ì ëë¤.
ë¤ì ì±í°ìì ì´ë° ì©ì´ë¤ì ëí´ ë ìì¸í ì´í´ë³´ê² ìµëë¤. BufferSourceë ê°ì¥ ííê² ì°ì´ë ì©ì´ ì¤ íëë¡, ArrayBufferë ê·¸ ìì ë·°ì²ë¼ '모ë ì¢
ë¥ì ì´ì§ ë°ì´í°â를 ì미í©ëë¤.
ìì½íë ë¤ìê³¼ ê°ìµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.