node.js의 Buffer 클래스를 사용하여 바이너리 데이터를 처리하는 방법

高洛峰
풀어 주다: 2016-12-05 11:08:14
원래의
935명이 탐색했습니다.

머리말

Node.js에는 바이너리 데이터를 저장하기 위한 버퍼 영역을 생성하는 데 사용되는 Buffer 클래스가 정의되어 있습니다. 이 기사에서는 node.js의 Buffer 클래스가 바이너리 데이터를 처리하는 방법을 자세히 소개합니다. 더 이상 고민하지 말고 자세한 소개를 살펴보겠습니다.

버퍼 객체 생성

첫 번째 방법: 배열을 직접 사용하여 버퍼 영역 초기화

var arr = [0,1,2]
var buf = new Buffer(arr)
console.log(buf)
로그인 후 복사

실행 효과:

node.js의 Buffer 클래스를 사용하여 바이너리 데이터를 처리하는 방법

두 번째: 문자열을 직접 사용하여 캐시 영역 초기화

var str = 'hello'
var buf = new Buffer(str)
console.log(buf)
로그인 후 복사

실행 효과: Node.js에서

node.js의 Buffer 클래스를 사용하여 바이너리 데이터를 처리하는 방법

, 문자열 입력 및 출력의 인코딩 및 디코딩이 자동으로 수행되며 기본적으로 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))
로그인 후 복사

   



관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿