Buffer
Buffer는 고정된 길이의 바이트 저장단위이다. 전역 스코프로 import하거나 require할 필요가 없다. (하지만, node.js 공식 문서에서는 명시적으로 import, require하는 것을 추천한다.)
Node.js에서 Buffer는 원시 이진 데이터를 처리하기 위해 사용되어진다. 한 buffer의 각 값은 바이트를 나타낸다.
Buffer는 array와 유사하지만 차이점이 존재한다. array는 사이즈 변환이 가능하고 어떤 타입이든 처리할 수 있지만 Buffer는 사이즈 변환이 불가하고 오직 이진값만 처리한다.
Buffer.alloc(size, fill, encoding)
size: 생성할 Buffer의 길이
fill: 생성할 Buffer에 채워넣을 값
encoding: Buffer의 인코딩 방식 ( ex: utf-8, utf8, base64 )
const buf1 = Buffer.alloc(10);
console.log(buf1);
// 결과: <Buffer 00 00 00 00 00 00 00 00 00 00>
0으로 채워진 길이 10인 Buffer를 출력하는 예제이다. 그 결과 0으로 채워진 길이 10인 Buffer가 <Buffer 00 00 00 00 00 00 00 00 00 00> 이렇게 출력된다.
const buf = Buffer.alloc(5, "a");
console.log(buf);
// 결과: <Buffer 61 61 61 61 61>
위는 길이 5인 a로 채워진 Buffer를 출력하는 예제이다. 그 결과 <Buffer 61 61 61 61 61>이 출력된다.
const bufE = Buffer.alloc(5, "Hi", "utf8");
console.log(bufE.toString());
// 결과: HiHiH
위는 길이 5인 Hi로 채워진 'utf8' 인코딩 방식의 Buffer를 출력한다. 콘솔 출력 시 toString으로 문자형식으로 바꿔 출력되도록 하였다. 그리하여 HiHiH가 출력된다.
Buffer.allocUnsafe(size)
size: 생성할 Buffer의 길이
alloc 처럼 주어진 size인자에 따라 특정 길이의 Buffer를 생성한다. 이때 allocUnsafe는 데이터를 0으로 Buffer를 초기화 하지 않고 생성한다. alloc보다 빠르다.
const buf1 = Buffer.alloc(5, "Hello");
const buf2 = Buffer.allocUnsafe(5);
buf1.copy(buf2);
console.log(buf2.toString());
// 결과: Hello
예제에서 buf1은 길이 5인 Hello를 내용으로 한 Buffer이고 buf2는 allocUnsafe로 길이 5인 Buffer를 생성해 할당한 변수이다. buf1.copy(buf2)를 통해 buf2에 buf1의 내용을 복사한 후 출력해보면 buf1의 내용인 Hello가 출력됨을 볼 수 있다.
Buffer.from()
const buf = Buffer.from("Hello");
console.log(buf);
// 결과: <Buffer 48 65 6c 6c 6f>
console.log(buf.length);
// 결과: 5
console.log(buf[3]);
// 결과: 108
Hello라는 문자를 from의 인자로 할당한 Buffer이다. 콘솔 출력 결과는 <Buffer 48 65 6c 6c 6f>이다. Hello가 유니코드 형태로 출력되었다.
buf.length를 출력하면 Buffer의 길이인 5가 출력되고 buf[3]를 출력하면 'l'의 유니코드 즉, 108이 출력된다.
'백엔드 > Node.js' 카테고리의 다른 글
zsh: command not found: nodemon 해결하기 (0) | 2024.03.17 |
---|---|
[Node.js] Node.js에서 파일명 변경하기 / fs.rename / fsPromises.rename / fs.renameSync (0) | 2023.03.07 |
[Node.js / Javascript] console에 대하여 - console 종류 (0) | 2023.02.21 |
[Node.js] Global object - __dirname, __filename, exports, module, require (0) | 2022.08.22 |