머리말
Node.js에는 바이너리 데이터를 저장하기 위한 버퍼 영역을 생성하는 데 사용되는 Buffer 클래스가 정의되어 있습니다. 이 기사에서는 node.js의 Buffer 클래스가 바이너리 데이터를 처리하는 방법을 자세히 소개합니다. 더 이상 고민하지 말고 자세한 소개를 살펴보겠습니다.
버퍼 객체 생성
첫 번째 방법: 배열을 직접 사용하여 버퍼 영역 초기화
var arr = [0,1,2] var buf = new Buffer(arr) console.log(buf)
실행 효과:
두 번째: 문자열을 직접 사용하여 캐시 영역 초기화
var str = 'hello' var buf = new Buffer(str) console.log(buf)
실행 효과: Node.js에서
, 문자열 입력 및 출력의 인코딩 및 디코딩이 자동으로 수행되며 기본적으로 UTF8 인코딩이 사용됩니다.
Buffer 객체와 string 객체 간의 변환
(1) toString
Buffer 객체의 toString 메소드를 사용하여 Buffer 객체를 변환할 수 있습니다. into 저장된 데이터를 문자열로 변환합니다.
buf.toString([encoding],[start],[end])
선택 매개변수 1: Buffer 개체에 저장되는 텍스트 인코딩 형식을 지정하는 데 사용됩니다. 기본 매개변수는 UTF8입니다.
선택 매개변수 2: 변환된 데이터의 시작 위치를 바이트 단위로 지정합니다.
선택 매개변수 3: 변환된 데이터의 끝 위치를 바이트 단위로 지정합니다.
샘플 코드는 다음과 같습니다.
var buf = new Buffer('阁下何不随风起') console.log(buf) console.log(buf.toString('utf8',9,12)) console.log(buf.toString('utf8',12,buf.length))
(2) write
가끔 써야 할 때가 있습니다. 이미 생성된 Buffer 객체 문자열을 작성하려면 Buffer 객체의 write 메소드를 사용할 수 있습니다.
buf.write(string,[offset],[length],[encodign])
필수변수 1 : 작성할 문자열 지정
선택변수 2~3 : 지정 문자열이 바이트 데이터로 변환된 후의 쓰기 위치는 첫 번째 + 오프셋 바이트부터 오프셋 + 길이 바이트까지입니다.
선택적 매개변수 4: 인코딩 형식, 기본 utf8
코드는 다음과 같습니다.
var buf = new Buffer('阁下何不随风起') buf.write('扶摇直上千万里',0,buf.length) console.log(buf.toString())
(3) StringDecoder 객체
Node.js에서는 StringDecoder 객체를 사용하여 Buffer 객체의 데이터를 변환할 수도 있습니다. 이 객체는 Buffer 객체의 toString 메소드와 동일한 기능을 가지고 있지만 UTF8 인코딩 형식의 문자열에 대해 더 나은 지원을 제공합니다.
StringDecoder 객체를 사용하려면 먼저 Node.js에서 string_decoder 모듈을 로드해야 합니다.
var StringDecoder = require('string_decoder').StringDecoder
string_decoder 모듈을 로드한 후 다음과 같이 StringDecoder 개체를 생성할 수 있습니다.
var decoder = new StringDecoder([encoding])
Buffer 객체의 데이터를 문자열을 사용하는 경우 StringDecoder 객체의 쓰기 메소드를 사용하여 변환해야 하는 Buffer 객체를 지정할 수 있습니다. 이 메소드는 변환된 문자열을 반환합니다. 코드는 다음과 같습니다.
decoder.write(buffer)
자, Buffer 객체의 toString 메소드와 StringDecoder의 write 메소드를 비교해 보겠습니다. utf8을 더 잘 지원합니다.
Buffer의 toString 메소드는 다음과 같습니다.
//在UTF-8编码格式下,将1个文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf) //0x是我手动加的 var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd]) console.log(str1.toString()) var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7]) console.log(str2.toString())
물론 다음 메소드를 사용하여 두 개의 버퍼 객체를 연결한 후 toString을 사용할 수도 있습니다. 문자열로 변환하지만 Buffer 객체의 길이가 길면 이 작업의 성능이 느려집니다.
Buffer.concat([str1,str2]).toString()
StringDecoder의 쓰기 방법은 다음과 같습니다.
//在UTF-8编码格式下,将1个文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf) //StringDecoder var StringDecoder = require('string_decoder').StringDecoder var decoder = new StringDecoder() //0x是我手动加的 var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd]) console.log(decoder.write(str1)) var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7]) console.log(decoder.write(str2))
누가 더 나은 지원을 하는지 알 수 있습니다. 한눈에 .
Buffer 객체와 JSON 객체 간 변환
Node.js에서는 JSON.stringify 메소드를 사용하여 Buffer 객체에 저장된 데이터를 문자열로 변환할 수 있습니다. 또한 변환된 문자열을 배열로 복원하려면 JSON.parse 메서드를 사용하세요.
캐시 데이터 복사
Buffer 객체에 저장된 바이너리 데이터를 다른 Buffer 객체에 복사해야 하는 경우 Buffer 객체의 복사 메소드를 사용할 수 있습니다. 복사 방법은 다음과 같습니다.
buf.copy(targetBuffer,[targetStart],[sourceStart],[sourceEnd])
필수변수 1: 복사할 대상 Buffer 객체 지정
선택적 매개변수 2:
에서 데이터 쓰기를 시작할 대상 Buffer 객체의 바이트 수를 지정합니다. 선택적 매개변수 3: 복사 소스 Buffer 객체에서 데이터를 가져올 때 시작 위치를 지정합니다. 기본값은 0입니다.
선택 매개변수 4: 복사 원본 Buffer 개체에서 데이터를 가져올 때 끝 위치를 지정합니다. 기본값은 복사 원본 개체의 길이입니다.
샘플 코드입니다.
//目标:将buf1 Buffer对象中的内容复制到buf2 Buffer对象中 //复制的目标起始位置为buf2 Buffer对象中的第11个字节处(第11个字节出开始写入) var buf1 = new Buffer('阁下何不随风起') console.log(buf1) var buf2 = new Buffer(128) buf2.fill(0) console.log(buf2) //关键代码 buf1.copy(buf2,10) //输出复制后的buf2 console.log(buf2) //以字符串的形式打印buf2 var StringDecoder = require('string_decoder').StringDecoder var decoder = new StringDecoder() console.log(decoder.write(buf2))
Buffer 클래스
의 클래스 메소드 (1) isBuffer 메소드
를 사용합니다. 객체가 Buffer 객체인지 확인하려면 다음과 같은 방법을 사용하세요.
Buffer.isBuffer(objc)
샘플 코드는 다음과 같습니다.
var a = 'abcde' var b = new Buffer(10) console.log(typeof a) console.log(typeof b) console.log('---我是奇妙的分隔符----') console.log(Buffer.isBuffer(a)) console.log(Buffer.isBuffer(b))
Console
(2) byteLength 메소드
ByteLength 메소드를 사용하여 지정된 바이트 수를 계산할 수 있습니다. string 사용 방법은 다음과 같습니다.
Buffer.byteLength(string,[encoding])
필수변수 1: 바이트 수를 계산해야 하는 문자열을 지정합니다.
선택 매개변수 2: 인코딩 형식, 기본 utf8
샘플 코드는 다음과 같습니다.
var str = '阁下何不随风起' console.log(str.length) console.log(Buffer.byteLength(str,'utf8')) console.log(Buffer.byteLength(str,'base64')) console.log(Buffer.byteLength(str,'utf16le'))
(3)isEncoding方法
isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串。使用方法如下:
Buffer.isEncoding(encoding)
在isEncoding方法中,使用一个参数,用于指定需要被检测的字符串,如果该字符串为有效的编码格式字符串,则方法返回true,如果该字符串不是一个有效的编码格式字符串,则方法返回false。
示例代码如下:
var str1 = 'utf8' console.log(Buffer.isEncoding(str1)) var str2 = 'utf16le' console.log(Buffer.isEncoding(str2)) var str3= 'utf16e' console.log(Buffer.isEncoding(str3))