Published 2022-04-12

Node.js - Buffers

JavaScript没有二进制数据类型,bufferNode.js提供的专门用来存放二进制数据的缓存区。

创建 buffer

// 创建10字节的未启动的缓存区
var buf = Buffer.alloc(10)

// 从数组创建缓存区
var buf = Buffer.from([10, 20, 30, 40, 50])

// 从字符串创建缓存区
var buf = Buffer.from('Node.js', 'utf-8')

写入 buffer

语法:buf.write(string[, offset[, length]][, encoding])

var buf = Buffer.alloc(256)
len = buf.write('Node.js')
console.log(len) // 7

读取 buffer

语法:buf.toString(encoding,start,end)

buf = Buffer.alloc(26)
for (var i = 0; i < 26; i++) {
  buf[i] = i + 97
}

console.log(buf.toString('ascii')) // 输出: abcdefghijklmnopqrstuvwxyz
console.log(buf.toString('ascii', 0, 5)) //使用 'ascii' 编码, 并输出: abcde
console.log(buf.toString('utf8', 0, 5)) // 使用 'utf8' 编码, 并输出: abcde
console.log(buf.toString(undefined, 0, 5)) // 使用默认的 'utf8' 编码, 并输出: abcde

将 buffer 转换为 json 对象

语法:buf.toJson

const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5])
const json = JSON.stringify(buf)

// 输出: {"type":"Buffer","data":[1,2,3,4,5]}
console.log(json)

const copy = JSON.parse(json, (key, value) => {
  return value && value.type === 'Buffer' ? Buffer.from(value.data) : value
})

// 输出: <Buffer 01 02 03 04 05>
console.log(copy)

buffer 合并

语法:Buffer.contact(list,totalLength)

var buf1 = Buffer.from('Hello')
var buf2 = Buffer.from(' World!')
var buf3 = Buffer.concat([buf1, buf2])

console.log(buf3) //<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64 21>

buffer 比较

语法:buf.compare(..)

返回数字,0 表示相同,小于 0 表示 buf 在 bufToCompare 之前,大于 0 则相反

var buf = Buffer.from('Hello')
var bufToCompare = Buffer.from('hello')

var result = buf.compare(bufToCompare)
console.log(result) // -1

buffer 拷贝

语法:buf.copy(target,targetStart,sourceStart,sourceEnd)

var buf = Buffer.from('Hello')
var bufToCopy = Buffer.from('World')

bufToCopy.copy(buf, 2)
console.log(buf.toString()) //HeWor

buffer 切片

语法:buf.slice(start,end)

var buf = Buffer.from('Hello World')
var result = buf.slice(0, 5)
console.log(result.toString()) //Hello

入门教程 Node.js 文档