FE PARADISE

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

백엔드/Node.js

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

PARADISE247 2023. 3. 13. 01:12
반응형

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이 출력된다. 

 

 

반응형