节点缓冲区

了解什么是节点缓冲区,它们的用途以及如何使用它们

什么是缓冲区?

缓冲区是内存区域。 JavaScript开发人员对这个概念并不熟悉,比每天与内存交互的C,C ++或Go开发人员(或使用系统编程语言的任何程序员)要少得多。

它代表在V8 JavaScript引擎外部分配的固定大小的内存块(无法调整大小)。

您可以将缓冲区想象成一个整数数组,每个整数代表一个数据字节。

它是由Node实现的缓冲区类别

我们为什么需要缓冲液?

在传统上仅处理字符串而不是二进制文件的生态系统中,引入了缓冲区以帮助开发人员处理二进制数据。

缓冲区与。当流处理器接收数据的速度快于其消化速度时,它将数据放入缓冲区。

当您观看YouTube视频时,缓冲区的简单可视化是红线超出了可视化点:您下载数据的速度比查看数据的速度快,并且浏览器对数据进行缓冲。

如何创建缓冲区

使用以下命令创建一个缓冲区Buffer.from()Buffer.alloc(), 和Buffer.allocUnsafe()方法。

const buf = Buffer.from('Hey!')

您也可以只初始化传递大小的缓冲区。这将创建一个1KB的缓冲区:

const buf = Buffer.alloc(1024)
//or
const buf = Buffer.allocUnsafe(1024)

使用缓冲区

访问缓冲区的内容

缓冲区(字节数组)可以像数组一样进行访问:

const buf = Buffer.from('Hey!')
console.log(buf[0]) //72
console.log(buf[1]) //101
console.log(buf[2]) //121

这些数字是Unicode代码,用于标识缓冲区位置中的字符(H => 72,e => 101,y => 121)

您可以使用toString()方法:

console.log(buf.toString())

请注意,如果使用设置大小的数字初始化缓冲区,则可以访问包含随机数据而非空缓冲区的预初始化内存!

获取缓冲区的长度

使用length财产:

const buf = Buffer.from('Hey!')
console.log(buf.length)

遍历缓冲区的内容

const buf = Buffer.from('Hey!')
for (const item of buf) {
  console.log(item) //72 101 121 33
}

更改缓冲区的内容

您可以使用以下命令将整个数据字符串写入缓冲区write()方法:

const buf = Buffer.alloc(4)
buf.write('Hey!')

就像您可以使用数组语法访问缓冲区一样,您也可以以相同的方式设置缓冲区的内容:

const buf = Buffer.from('Hey!')
buf[1] = 111 //o
console.log(buf.toString()) //Hoy!

复制缓冲区

复制缓冲区可以使用copy()方法:

const buf = Buffer.from('Hey!')
let bufcopy = Buffer.alloc(4) //allocate 4 bytes
buf.copy(bufcopy)

默认情况下,您将复制整个缓冲区。另外3个参数可让您定义开始位置,结束位置和新的缓冲区长度:

const buf = Buffer.from('Hey!')
let bufcopy = Buffer.alloc(2) //allocate 2 bytes
buf.copy(bufcopy, 0, 2, 2)
bufcopy.toString() //'He'

切片缓冲区

如果要创建缓冲区的部分可视化,则可以创建切片。切片不是副本:原始缓冲区仍然是真相的来源。如果那改变了,您的切片也会改变。

使用slice()创建它的方法。第一个参数是开始位置,您可以指定一个第二个参数作为结束位置:

const buf = Buffer.from('Hey!')
buf.slice(0).toString() //Hey!
const slice = buf.slice(0, 2)
console.log(slice.toString()) //He
buf[1] = 111 //o
console.log(slice.toString())

免费下载我的Node.js手册


更多节点教程: