참고글

NodeJS 버퍼(Buffer) 사용하기
버퍼는 주기억장치에 마련된 임시 저장 공간입니다. 자세한 내용이 궁금하시면 참고글 링크를 봐 주시기 바랍니다.
Node에서도 입출력 수행 시 효율성을 위해 버퍼를 제공합니다. Node에서 버퍼를 사용하는 방법을 알아보겠습니다.

먼저 버퍼 객체를 생성하는 방법에는 크게 두 가지가 있습니다.
첫 번째는 버퍼의 크기를 지정하여 생성하는 방법이고 두 번째는 데이터를 버퍼에 입력함과 동시에 생성하는 방법입니다.
var buffer = new Buffer(20);

첫 번째 방법과 같이 버퍼의 크기를 지정하여 생성 하는 경우 버퍼의 크기가 고정되며, 크기를 초과하는 데이터를 입력 하면 데이터가 짤리고 지정된 크기보다 작은 데이터를 입력하는 경우 비어 있는 공간이 생기게 됩니다.
var buffer = new Buffer('입력할문자열');

두번째 방법과 같이 데이터를 입력함과 동시에 버퍼를 생성하는 경우 처음 입력했던 데이터의 크기(byte)만큼의 버퍼가 할당됩니다.
한글의 경우 한 글자당 3byte의 공간이 할당됩니다.



버퍼에서 자주 사용되는 메서드

메서드
설명
write(string, [offset], [length], [encoding])
버퍼에 데이터를 출력합니다. (출력데이터, 시작위치, 출력할 바이트 수 ,인코딩)
옵션을 특별히 지정해주지 않는경우 기본값으로 데이터를 모두 버퍼에 출력합니다. 인코딩 기본값은 'utf8'입니다.
toString([encoding], [start], [end])
버퍼에 담긴 데이터를 문자열로 변환합니다. 매개변수는 모두 생략 가능하며 변환할 문자열의 인코딩, 문자열의 시작위치, 끝 위치를 지정할 수 있습니다.
Buffer.isBuffer(obj)
obj가 버퍼 객체인지 확인합니다. 버퍼이면 true 아니면 false를 리턴합니다.
copy(targetBuffer, targetStart, sourceStart, sourceEnd)
현재 버퍼의 내용을 targetBuffer에 복사하여 넣습니다. targetStart는 복사하여 넣을 대상 버퍼의 시작위치를 지정하며 sourceStart는 현재버퍼의 어느 지점부터 복사할것일지를 지정합니다. sourceEnd는 어디까지 복사할지의 위치입니다.
Buffer.concat(bufferArr);
Buffer 클래스의 클래스 메서드입니다. 클래스 메서드 이므로 객체로 만들지 않고 Buffer 클래스를 통해 이용 가능합니다. bufferArr는 버퍼객체들이 담긴 배열이며 버퍼 객체들의 내용을 하나로 합쳐 새로운 버퍼를 만들어 리턴합니다.


이 밖의 메서드는 https://nodejs.org/docs/latest-v6.x/api/buffer.html 를 참고 합니다.


버퍼 사용 예제
var data = '버퍼에 출력할 문자열';
//한글 3byte 띄어쓰기 1byte
var buffer1 = new Buffer(29);

//데이터를 버퍼에 출력
var len = buffer1.write(data, 'utf8');
console.log('버퍼1의 크기 : %d byte, 버퍼1의 내용 : %s', len, buffer1.toString());

var buffer2 = new Buffer('버퍼를 생성함과 동시에 데이터 입력', 'utf8');
console.log('버퍼2의 내용 : %s', buffer2.toString());

console.log('buffer1 은 버퍼객체 입니까? : %s', Buffer.isBuffer(buffer1));

//var buffer3 = new Buffer(Buffer.byteLength(data)); 으로도 사용 가능
var buffer3 = new Buffer(buffer1.length);
buffer1.copy(buffer3, 0, 0, buffer1.length);

console.log('복사한 버퍼의 내용 : %s', buffer3.toString('utf8'));

var buffer4 = Buffer.concat([buffer1, buffer2, buffer3]);
console.log('버퍼 내용 합침 : %s', buffer4.toString('utf8'));


출력결과

버퍼1의 크기 : 29 byte,   버퍼1의 내용 : 버퍼에 출력할 문자열
버퍼2의 내용 : 버퍼를 생성함과 동시에 데이터 입력
buffer1 은 버퍼객체 입니까? : true
복사한 버퍼의 내용 : 버퍼에 출력할 문자열
버퍼 내용 합침 : 버퍼에 출력할 문자열버퍼를 생성함과 동시에 데이터 입력버퍼에 출력할 문자열
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,