blob_file_array-buffer.md
๐กFile: Blob, ArrayBuffer, TypedArray(Uint8Array)
๋ชฉํ: ์ด๋ฏธ์ง File์ ์ข ๋ ์ ๋๋ก ์๊ณ ๋ค๋ค๋ณด์โจ
๊ฐ์: ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ํ์ผ์ ๋ค๋ฃจ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ธ Blob, ArrayBuffer, Binary Data์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ํ์ผ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์ ์ก, ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ ๋๋ค.0. ๋ฒจ๋ก๊ทธ ํฌ์คํธ: File: Blob, ArrayBuffer, TypedArray(Uint8Array)
1. CodeSandbox ์คํ > https://codesandbox.io/s/unit8array-raw-binary-data-buffer-z3ki4q?file=/src/form/Form.jsx:275-694
2. MDN ๋ ํผ๋ฐ์ค Blob: https://developer.mozilla.org/en-US/docs/Web/API/Blob
Binary Data Buffer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer
TypedArray: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
Unit8Array: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array
1. Blob์ด ๋์ฒด ๋ญ์ผ?๐ค
Theย
Blob
ย object represents a blob, which is a file-like object of immutable, raw data Blob - Web APIs | MDN
File๊ณผ Blob
์น ๊ฐ๋ฐ์ ํ๋ฉด์ File
์ ๋ค๋ฃจ๋ค๋ณด๋ฉด Blob
์ ๋ณด์
จ์ ๊ฑฐ๋ผ๊ณ ์๊ฐํด์. Blob
์ ๋ญ ํ๋ ์น๊ตฌ์ผ๊น์?
-
File
๊ณผBlob
์ ๋ชจ๋ ์น ํ๋ซํผ์์ ํ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๋๋ค.- ์ด ๋ ๊ฐ์ฒด๋ ์์ ๊ด๊ณ์ ์์ผ๋ฉฐ,
File
์Blob
์ ํ์ฅ์ ๋๋ค. File
์Blob
์ ์์ํ๋ฏ๋กBlob
์ ๋ฉ์๋์ ์์ฑ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํFile
์ ํ์ผ๊ณผ ๊ด๋ จ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ๋ก ํฌํจํ๊ณ ์์ด ํ์ผ์ ๋ํ ์ ๋ณด๋ฅผ ๋์ฑ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ์ด ๋ ๊ฐ์ฒด๋ ์์ ๊ด๊ณ์ ์์ผ๋ฉฐ,
-
Blob
์ ์ผ๋ฐ์ ์ธ ์ด์ง ๋ฐ์ดํฐ ๋๋ ํ ์คํธ ๋ฐ์ดํฐ์ ์ปจํ ์ด๋๋ก ์ฌ์ฉ๋๊ณ ,File
์ ์ฃผ๋ก ํ์ผ ์ ๋ก๋ ๋ฐ ๊ด๋ จ ์์ ์ ํ์ฉ๋ฉ๋๋ค.| | File | Blob | | ---------- | --------------------------------------------- | ---------------------------------------- | | ์ค๋ช | ํ์ผ ๋ฐ์ดํฐ ์ปจํ ์ด๋ ๋ฐ ์ถ๊ฐ ๋ฉํ๋ฐ์ดํฐ ํฌํจ | ์ด์ง ๋๋ ํ ์คํธ ๋ฐ์ดํฐ ์ปจํ ์ด๋ | | ์์ | Blob์ ์์ํจ | N/A | | ์ฌ์ฉ๋ฒ | ํ์ผ ์ฒ๋ฆฌ ๋ฐ ์ ๋ก๋ ๋ฑ ํ์ผ ๊ด๋ จ ์์ ์ ์ฌ์ฉ | ๋ฐ์ดํฐ ์ปจํ ์ด๋๋ก ์ฌ์ฉ | | ์์ค | ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์ ๋ ฅ์์ ์ป์ด์ง ํ์ผ์ ๊ฐ์ฒด | ์ด์ง ๋ฐ์ดํฐ ๋๋ ํ ์คํธ ๋ฐ์ดํฐ | | ๋ฉํ๋ฐ์ดํฐ | ํ์ผ ์ด๋ฆ, ํฌ๊ธฐ, ์ ํ ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ ํฌํจ | ์ถ๊ฐ ๋ฉํ๋ฐ์ดํฐ ์์ | | ๋ฉ์๋ | Blob์ ๋ฉ์๋ ์์ + ํ์ผ ๊ด๋ จ ๋ฉ์๋ | slice(), stream(), text(), arrayBuffer() | | ์ฌ์ฉ ์์ | ์ฌ์ฉ์๊ฐ ์ ํํ ํ์ผ ์ฒ๋ฆฌ, ํ์ผ ์กฐ์ ๋ฑ | ์ด๋ฏธ์ง ์ ๋ก๋, ์ด์ง ๋ฐ์ดํฐ ์ฒ๋ฆฌ |
Blob, Binary Large Object
Blob์ ์ด์ง ๋ฐ์ดํฐ(binary data)๋ฅผ ๋ค๋ฃน๋๋ค.
-
ํ์ผ์ด๋ ์ด๋ฏธ์ง์ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ Blob ๊ฐ์ฒด๋ก ํํํ ์ ์์ต๋๋ค.
-
Blob ๊ฐ์ฒด๋
์ฝ๊ธฐ ์ ์ฉ
์ ๋๋ค. -
์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ฌ, ํ์ผ์ ๋ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
| ๋ฉ์๋ | ์ค๋ช | | ------------------------- | ------------------------------------------------------- | | Blob.slice() | Blob์ ์ผ๋ถ๋ฅผ ์๋ผ๋ด์ด ์๋ก์ด Blob์ ์์ฑ | | Blob.arrayBuffer() | Blob์ ArrayBuffer ํ์์ผ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ๋ณํ | | Blob.text() | Blob์ ํ ์คํธ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ๋ณํ | | Blob.stream() | Blob์ ReadableStream ํํ๋ก ๋ฐํ | | Blob.stream().getReader() | ReadableStream์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ Reader ๊ฐ์ฒด๋ฅผ ๋ฐํ |
-
Blob ๋ง๋ค์ด๋ณด๊ธฐ
const obj = { hello: "world" };
const blob = new Blob([JSON.stringify(obj, null, 2)], {
type: "application/json",
});
2. arrayBuffer ์์๋ณด๊ธฐ
arraryBuffer ๋ฉ์๋๋?
arrayBuffer๋ ArrayBuffer
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ Promise๋ฅผ ๋ฐํํ๋ ๋น๋๊ธฐ์ ์ธ ๋ฉ์๋์
๋๋ค.
- Promise, ArraryBuffer
๊ณ ์ ๋ ๊ธธ์ด์ ์ด์ง ๋ฐ์ดํฐ ๋ฒํผ
ArrayBuffer
๋ ๊ณ ์ ๋ ๊ธธ์ด์ ์ด์ง ๋ฐ์ดํฐ ๋ฒํผ๋ฅผ ๋ํ๋ด๋ JavaScript์ ๋ด์ฅ ๊ฐ์ฒด์
๋๋ค.
โ ๊ณ ์ ๋ ๊ธธ์ด๊ฐ ์ด๋ป๊ฒ ๋๋๋ฐ์?
ArrayBuffer
์ ํฌ๊ธฐ(๊ณ ์ ๋ ๊ธธ์ด)๋ ์์ฑํ ๋ ์ง์ ๋ฉ๋๋ค. ํฌ๊ธฐ๋ ๋ฐ์ดํธ ๋จ์๋ก ์ง์ ๋๋ฉฐ, 0 ์ด์์ ์ ์๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, new ArrayBuffer(16)
์ 16๋ฐ์ดํธ ํฌ๊ธฐ์ ArrayBuffer
๋ฅผ ์์ฑํฉ๋๋ค.
Uint8Array
, Int16Array
, Float32Array
๋ฑ์ TypedArray๋ฅผ ์ฌ์ฉํ์ฌ ArrayBuffer
์ ๋ฒํผ๋ฅผ ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค. ์ด๋ฌํ TypedArray๋ ArrayBuffer
์ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ํน์ ๋ฐ์ดํฐ ํ์์ผ๋ก ํด์ํ๊ณ ์กฐ์ํ ์ ์๋๋ก ๋์์ค๋๋ค.
๐ TypedArray์ ์์
Aย TypedArrayย object describes an array-like view of an underlyingย binary data buffer.
| TypedArray | Size in bytes | ์ฌ์ฉ ์์ | | ----------------- | ------------- | ------------------------------------------------------- | | Int8Array | 1 byte | ๋ถํธ ์๋ 8๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Uint8Array | 1 byte | ๋ถํธ ์๋ 8๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Uint8ClampedArray | 1 byte | 0์์ 255 ์ฌ์ด์ ๋ถํธ ์๋ 8๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Int16Array | 2 bytes | ๋ถํธ ์๋ 16๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Uint16Array | 2 bytes | ๋ถํธ ์๋ 16๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Int32Array | 4 bytes | ๋ถํธ ์๋ 32๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Uint32Array | 4 bytes | ๋ถํธ ์๋ 32๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Float32Array | 4 bytes | 32๋นํธ ๋จ์ ๋ฐ๋ ๋ถ๋์์์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | Float64Array | 8 bytes | 64๋นํธ ๋ฐฐ์ ๋ฐ๋ ๋ถ๋์์์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ | | BigInt64Array | 8 bytes | 64๋นํธ ๋ถํธ ์๋ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ (BigInt ํ์) | | BigUint64Array | 8 bytes | 64๋นํธ ๋ถํธ ์๋ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ (BigInt ํ์) |
โ ์ด์ง ๋ฐ์ดํฐ ๋ฒํผ๊ฐ ๋ญ๊ฐ์?
์ด์ง ๋ฐ์ดํฐ ๋ฒํผ๋ ์ปดํจํฐ์์ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ
์ ์ผ๋ถ๋ถ์
๋๋ค.
์ด์ง ๋ฐ์ดํฐ๋ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ ๋นํธ(bit)์ ๋์ด๋ก ํํ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋งํฉ๋๋ค.
์ปดํจํฐ์์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ด์ง ํํ๋ก ์ ์ฅ๋๋ฉฐ, ์ซ์, ๋ฌธ์, ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค ๋ฑ ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๊ฐ ์ด์ง ๋ฐ์ดํฐ๋ก ํํ๋ฉ๋๋ค.
์ฌ์ฉํ๋ ์ด์ !
ArrayBuffer
๋ ์ผ๋ฐ์ ์ผ๋ก ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.- ์๋ฅผ ๋ค์ด, ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค, ํ์ผ ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋
ArrayBuffer
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๋ฒํผ์ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด JavaScript๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์กฐ์ํ ์ ์์ต๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค, ํ์ผ ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋
- ํ์ผ์ด๋ ๋คํธ์ํฌ ์์ฒญ ๋ฑ์์ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก
FileReader
์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ํ์ผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ ํArrayBuffer
๋ก ๋ณํํ์ฌ ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก
๐ ๊ฐ์ด ์์๋๊ธฐ: ์ด์ง ๋ฐ์ดํฐ
binary ํ์ผ:
- ์ ์ฅ๊ณผ ์ฒ๋ฆฌ ๋ชฉ์ ์ ์ํด
์ด์ง ํ์์ผ๋ก ์ธ์ฝ๋ฉ ๋ ๋ฐ์ดํฐ ํ์ผ
์ ๋๋ค. - ์ซ์, ๋ฌธ์, ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค ๋ฑ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
raw ํ์ผ:
- ํน์ ํ์ผ ํ์์ ํค๋๋ ์์ถ ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๊ทธ๋๋ก ์ ์ฅํ
์์ํ ์ด์ง ๋ฐ์ดํฐ ํ์ผ
์ ๋๋ค. - ์ฃผ๋ก ์ด๋ฏธ์ง, ์ค๋์ค, ๋น๋์ค ๋ฑ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
3. file ์ฃผ์๊ตฌ์, binary data๋ก ์ฃผ์ธ์.
๐ฅช ์ ๋์๋ ์ผ์ฑ ์์ผ์ธ์?
CodeSandBox ์คํ!
ํ์ผ์ ์ ์ฅํ๋ ค ํ ๋, ๋ค์ ์ด๋ฏธ์ง์ ๊ฐ์ด File
๋ name, size, lastModified ๋ฑ, ์ํ์ง ์๋ ๋ฉํ ์ ๋ณด๊น์ง ์ ๋ถ ํฌํจํ๊ณ ์์ต๋๋ค.
- ๋ง์ฝ์ ์ด ์ด๋ฏธ์ง ํ์ผ์ raw ๋ฐ์ดํฐ๋ง ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
const file = e.target.files[0];
Blob.arrayBuffer()
arrayBuffer๋ ArrayBuffer
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ Promise๋ฅผ ๋ฐํํฉ๋๋ค.
const buffer = await file.arrayBuffer();
๋ค๋ง ๋น๋๊ธฐ๋ก ๋ฐ์ ArrayBuffer๋ ์ฝ์์์๋ ํ์ธํ ์ ์์ต๋๋ค.
๐ console์์ arrayBuffer๋ฅผ ํ์ธํ ์ ์๋ ์ด์
์ฝ์์์ arrayBuffer
๋ฅผ ์ง์ ์ถ๋ ฅํ๋ฉด ์์ํ ๊ฒฐ๊ณผ๊ฐ ํ์๋์ง ์๋ ์ด์ ๋ arrayBuffer
๊ฐ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ํน์ํ ํ์์ด๊ธฐ ๋๋ฌธ์
๋๋ค. arrayBuffer
๋ ์ผ๋ จ์ ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ง ๋ฒํผ๋ก์ ํ
์คํธ๋ก ์ง์ ํด์ํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์๋ฏธ๊ฐ ์๋ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
- reader๊ฐ onload๋ ํ, JSON.stringify๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
console.log("Buffer Stringify: ", JSON.stringify(unit8Buffer, null, 2));
๐
JSON.stringify()
JSON์ stringify ๋ฉ์๋๋ JavaScript ๊ฐ์ฒด๋ ๋ฐฐ์ด์ JSON ๋ฌธ์์ด๋ก ๋ณํํ๋ ํจ์์ ๋๋ค.
JSON.stringify()
๋ฉ์๋๋ ์ธ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์: ๋ณํํ JavaScript ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ ๋๋ค.
- ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์: replacer ํจ์๋ก, ์ํ๋ ์์ฑ์ ํํฐ๋งํ๊ฑฐ๋ ๋ณํํ๋๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก
null
์ ์ ๋ฌํ์ฌ ๋ชจ๋ ์์ฑ์ ๋ณํํฉ๋๋ค. - ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์: ๋ค์ฌ์ฐ๊ธฐ(indentation)์ ์ฌ์ฉ๋๋ ๊ณต๋ฐฑ ๋ฌธ์ number์
๋๋ค.
2
๋ฅผ ์ ๋ฌํ๋ฉด 2์นธ์ ๊ณต๋ฐฑ ๋ฌธ์๋ก ๋ค์ฌ์ฐ๊ธฐ๊ฐ ์ ์ฉ๋ฉ๋๋ค.
Unit8Array
๐ Unit8Array๋ ๋ถํธ ์๋ 8๋นํธ ์ ์ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ TypedArray์ ๋๋ค.
TypedArray
๋buffer
์์ฑ์ ํตํด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฉฐ,TypedArray.from()
๋ฉ์๋๋ ์์ฑ์ ํจ์ ๋ฑ์ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธTypedArray
์ฌ์ด์์ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ ์ ์์ต๋๋ค.- ์น ๋ธ๋ผ์ฐ์ , Node.js, ์น ์์ปค ๋ฑ ๋ค์ํ ํ๋ซํผ๊ณผ ํ๊ฒฝ์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ์ฌ๋ฌ ํ๋ซํผ์์ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ์ด์์ฑ์ ๋์ผ ์ ์๋ ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค.
์ Unit8Array์ฃ ?
์ด์ A. ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
Uint8Array
๋ 8๋นํธ ๋ถํธ ์๋ ์ ์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด 1๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณธ๋ฌธ ์๋จ์์ ์ ๋ฆฌํ๋ ๊ฒ๊ณผ ๊ฐ์ด, ๋ค๋ฅธ TypedArray
๋ ๋ ํฐ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ ๋ง์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์, Uint8Array
๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด์ B. ์ด๋ฏธ์ง ํ์ผ์ ํฝ์ ๋ฐ์ดํฐ ํํ
๋๋ถ๋ถ์ ์ด๋ฏธ์ง ํ์ผ์ 8๋นํธ ํฝ์ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
Uint8Array
๋ 8๋นํธ ๋ถํธ ์๋ ์ ์๋ฅผ ๋ค๋ฃจ๋TypedArray
๋ก์, ์ด๋ฏธ์ง ํ์ผ์ ํฝ์ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ธฐ์ ์ ํฉํฉ๋๋ค.- ์ด๋ฏธ์ง ํ์ผ์ ํฝ์
๊ฐ๋ค์ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ฐ ํฝ์
์ RGB ๊ฐ(๊ฐ ์์์ด 0~255) ๋๋ RGBA ๊ฐ์ผ๋ก ํํ๋ฉ๋๋ค.
Uint8Array
๋ 0๋ถํฐ 255๊น์ง์ ๊ฐ์ ํํํ ์ ์๊ธฐ ๋๋ฌธ์ ํฝ์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ฒ ํํํ ์ ์์ต๋๋ค.
ArrayBuffer๋ฅผ ๋ณํํ๊ธฐ
์ด๋ฏธ์ง๋ฅผ Unit8Array ํํ์ ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ก ๋ณํํฉ๋๋ค.
new Unit8Array()
const imageByteData = [...new Unit8Array(buffer)]; // buffer: ์์์ ๋ฐํ ๋ฐ์ ArrayBuffer
Unit8Array๋ฅผ spreadํ๋ ์ด์ !
new Uint8Array(buffer)
๋ฅผ [...new Uint8Array(buffer)]
๋ก spreadํ๋ ์ด์ ๋ Uint8Array
๋ฅผ JavaScript์ ์ผ๋ฐ ๋ฐฐ์ด๋ก ๋ณํํ๊ธฐ ์ํด์์
๋๋ค.
Uint8Array
๋ TypedArray๋ก์, ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ ๋ฐฐ์ด ํํ์ ๋๋ค. ํ์ง๋งUint8Array
๋ ์ผ๋ฐ ๋ฐฐ์ด๊ณผ๋ ๋ค๋ฅธ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,Uint8Array
๋map
,filter
,reduce
์ ๊ฐ์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.- ๋ฐ๋ผ์,
Uint8Array
์ ๊ฐ์ ๊ฐ์ง๋ ์ผ๋ฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ธฐ ์ํด, spread ์ฐ์ฐ์(...
)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ํํ์ Uint8Array
binary data๋ฅผ ๋ฐ์ดํฐ ์ ์ฅ, ํต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<div>
<h4>์ด์ง ๋ฐ์ดํฐ binary data: </h4>
<div style={{ fontSize: "10px", maxWidth: "320px" }}>
{arrayBuffer && JSON.stringify(arrayBuffer, null, 2)}
</div>
</div>
๊ฒฐ๋ก
์ด๋ฏธ์ง ํ์ผ๊ณผ ๊ด๋ จํ์ฌ Binary Data(TypedArray), Blob, ArrayBuffer์ ๋ํด ์์๋ณด์์ต๋๋ค๐
๐ฅช ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ Blob, ArrayBuffer, Uint8Array ๋ฑ์ ํ์ฉํ์ฌ, ์ด์ง ํ์์ผ๋ก ๋ณํํ๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ฏธ์ง ์ ๋ก๋์ ๊ด๋ จ๋ ๋ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ์ด๋ฏธ์ง ์
๋ก๋:
์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง ํ์ผ์ ์ ํํ๋ฉด ํด๋น ํ์ผ์ JavaScript์์
File
๊ฐ์ฒด๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
File
๊ฐ์ฒด๋ Blob์ ํ์ ํด๋์ค์ด๋ฉฐ, ํ์ผ์ ๋ํ ์ ๋ณด์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค.- ์ฌ์ฉ์๊ฐ ์ ํํ ์ด๋ฏธ์ง ํ์ผ์
FileReader
๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ ํํ ์ด๋ฏธ์ง ํ์ผ์
FileReader
์readAsArrayBuffer()
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๋ฏธ์ง ํ์ผ์ ArrayBuffer๋ก ๋ณํํ ์ ์์ต๋๋ค.
- ์ด๋ฏธ์ง ๋ฐ์ดํฐ ํ์ฉ:
readAsArrayBuffer()
๋ฉ์๋์ ์๋ฃ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์, ์ด๋ฏธ์ง ํ์ผ์ ArrayBuffer ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.- ArrayBuffer๋ฅผ ์ฌ์ฉํ์ฌ
Uint8Array
๋ก ๋ณํํฉ๋๋ค.Uint8Array
๋ 8๋นํธ ๋ถํธ ์๋ ์ ์ ๋ฐฐ์ด๋ก, ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉํฉ๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ์ฌ ์ ์ฅํ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ ๋ด์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ํ์ํ๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ArrayBuffer๋ฅผ ์ฌ์ฉํ์ฌ