Node.js의 버퍼 이해

Node.js의 버퍼 이해
당신과 같은 독자는 MUO를 지원하는 데 도움이 됩니다. 귀하가 당사 사이트의 링크를 사용하여 구매하면 당사는 제휴 수수료를 받을 수 있습니다. 자세히 알아보기

버퍼는 원시 메모리의 특정 위치입니다. 특정 순간에 처리 장치가 수용할 수 없는 초과 바이너리 데이터를 위한 임시 저장 공간 역할을 합니다.





Node.js에는 Buffer 클래스가 포함되어 있습니다. 파일 시스템에서 TCP(전송 제어 프로토콜) 스트림 및 읽기-쓰기 작업을 관리할 때 이진 데이터를 처리할 수 있습니다.





오늘의 메이크업 비디오

버퍼의 내용을 만들고 읽고 변경하는 방법을 알아봅니다.





버퍼 생성

Node.js에서 버퍼를 만들려면 다음을 사용합니다. 할당() 또는 에서() 행동 양식. 그만큼 할당() 메소드는 새 버퍼를 생성하고 생성하는 동안 크기를 첫 번째이자 유일한 필수 매개변수로 지정합니다. 버퍼 생성 시 저장할 데이터가 없을 때 유용합니다.

다음을 사용하여 버퍼를 생성할 때 버퍼 크기 매개변수를 바이트 단위로 지정하십시오. 할당() 방법. 예를 들어:



 const buf = Buffer.alloc(8); 
console.log(buf);
// output: <Buffer 00 00 00 00 00 00 00 00>

Buffer 클래스는 새 데이터를 생성할 때 자동으로 0을 자리 표시자 값으로 추가합니다. 할당() 방법.

Windows 10 알 수 없는 USB 장치(장치 설명자 요청 실패)

Buffer 클래스는 각 0 값을 다음과 같이 표현합니다. 00 , 16진수 형식을 사용합니다. 이 예에서는 총 8개의 값을 포함합니다.





다른 자리 표시자 값으로 버퍼를 초기화하려면 두 번째 채우다 매개변수:

 const buf_filled = Buffer.alloc(8, 5); 
console.log(buf_filled);
// output: <Buffer 05 05 05 05 05 05 05 05>

이 개체는 값의 8바이트를 저장하는 메모리 부분을 인용합니다. 05 . 숫자를 채우다 매개변수, 버퍼는 바이너리로만 데이터를 저장합니다.





Buffer에 메모리를 할당한 후 다음을 호출하여 데이터를 씁니다. 쓰다() 방법:

 const buf = Buffer.alloc(8); 

buf.write("v", "utf-8");
console.log(buf)
// output: <Buffer 76 00 00 00 00 00 00 00>

buf.write("va","utf-8");
console.log(buf)
// output: <Buffer 76 61 00 00 00 00 00 00>

그만큼 쓰다() 메서드는 문자 인코딩을 사용하여 첫 번째 매개변수를 변환합니다. UTF-8 그런 다음 문자열을 Buffer에 씁니다. 문자열에 두 번째 문자를 추가하면 두 번째 바이트가 채워집니다.

문자열이나 배열과 같은 기존 데이터 유형에서 데이터를 추출하려면 에서() 방법. 이 메서드는 문자열과 배열에서 버퍼를 만듭니다.

예를 들어:

 // String 
const stringBuf = Buffer.from('string')
console.log(stringBuf)
// output: <Buffer 73 74 72 69 6e 67>

// Array
const arrayBuf = Buffer.from([97, 114, 114, 97, 121], 'hex')
console.log(arrayBuf);
// output: <Buffer 61 72 72 61 79>

그만큼 에서() 메서드는 입력을 첫 번째 매개 변수로 사용하고 데이터를 인코딩하는 데 필요한 바이트 수를 계산한 다음 결과를 Buffer로 보냅니다. 다른 인코딩 형식을 두 번째 매개 변수로 제공하면 기본 인코딩(UTF-8)을 재정의할 수 있습니다.

에 숫자 전달 에서() 방법은 오류가 발생합니다.

버퍼 읽기

버퍼는 배열과 비슷하지만 크기를 조정할 수 없으며 처리할 수 있습니다. 이진 컴퓨터 데이터 내장 방법 덕분입니다.

Buffer 클래스를 사용하면 JavaScript의 대괄호 구문을 사용하여 데이터의 개별 바이트를 읽을 수 있습니다.

예를 들어:

 const myBuf = Buffer.from('Mine'); 
console.log(MyBuf[1]);
// output: 105

console.log(MyBuf[3]);
// output: 101

console.log(MyBuf[5]);
// output: undefined

위의 코드 블록은 대괄호 구문을 사용하여 십진수 표현에서 첫 번째 및 세 번째 바이트의 값을 얻습니다. 유효하지 않은 바이트를 얻으려고 시도하면 한정되지 않은 오류.

모든 데이터에 액세스하기 위해 Buffer 클래스는 메소드와 함께 제공됩니다. toJSON() 그리고 toString() , 두 가지 형식으로 내용을 얻습니다.

그만큼 toString() 메서드는 버퍼 내용으로 문자열을 출력합니다.

 const myBuf = Buffer.from('Mine'); 
console.log(myBuf.toString());
// output: 'Mine'

const numberBuf = Buffer.from([123]);
console.log(numberBuf.toString())
// output: '{'

const emptyBuf = Buffer.alloc(5);
console.log(emptyBuf.toString());
// output: '\x00\x00\x00\x00\x00'

첫 번째 호출은 Buffer 값을 ' 내 거 ', toString에 대한 호출이 복제합니다. 두 번째 예는 초기화를 위해 단일 정수 배열을 사용하며, 문자열 표현은 ' { ' 캐릭터. 마지막 경우에 5개의 버퍼가 있습니다. 널값 문자열 '을 반환합니다. \x00\x00\x00\x00\x00 '. 문자열 \x00 null의 16진수 표현입니다.