# Buffer

  • Buffer 是用于处理二进制数据流
  • 实例类似整数数组,大小固定
  • C++ 代码在 V8 堆外分配物理内存

创建 buffer:

  • Buffer.alloc(len, content) 创建一个长度为 len 的使用 content 的 buffer
  • Buffer.allocUnsafe(len) 创建一个长度为 len 内容随机的 buffer
  • Buffer.from(array | string, encoding)

Buffer 静态方法:

  • Buffer.byteLength(string, [encoding]) 英文1个字节 汉字三个字节
  • Buffer.isBuffer(obj)
  • Buffer.concat(list[, totalLength])

实例的常用方法属性:

  • buf.length
  • buf.toString()
  • buf.fill()
  • buf.equals()
  • buf.indexOf()
  • buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
// 解决中文乱码
const buf = Buffer.from('中文字符串!')

for (let i = 0; i < buf.length; i += 5) {
  let b = Buffer.allocUnsafe(5)
  buf.copy(b, 0, i)
  console.log(b.toString()) // 打印乱码,因为中文一个字是三个字节,而上边给 b 分配了 5 个字节
}

const StringDecoder = require('string_decoder').StringDecoder
const decoder = new StringDecoder('utf8')

for (let i = 0; i < buf.length; i += 5) {
  let b = Buffer.allocUnsafe(5)
  buf.copy(b, 0, i)

  console.log(decoder.write(b))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18