본문 바로가기
백엔드/Node.js

[Node.js] Buffer란? / Buffer.alloc, Buffer.allocUnsafe, Buffer.from

by PARADISE247 2023. 3. 13.
반응형

Buffer

Buffer는 고정된 길이의 바이트 저장단위이다. 전역 스코프로 import하거나 require할 필요가 없다. (하지만, node.js 공식 문서에서는 명시적으로 import, require하는 것을 추천한다.) 

Node.js에서 Buffer원시 이진 데이터를 처리하기 위해 사용되어진다. 한 buffer의 각 값은 바이트를 나타낸다.

Bufferarray와 유사하지만 차이점이 존재한다. 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이 출력된다. 

 

 

반응형