首页 > 解决方案 > 在 node.js 中使用 Buffer

问题描述

我明白为什么我需要使用 Buffer。

但是我对缓冲区语法的实际使用不是很清楚。

在下面的示例中,

       const parsedBody = Buffer.concat(body).toString();
        const message = parsedBody.split('=')[1];
        fs.writeFileSync('receivedText', message);

缓冲区用于在之前进行延迟

    const message = parsedBody.split('=')[1];
    fs.writeFileSync('receivedText', message);

被执行。

但就语法而言,这对我来说有点奇怪。

如果我想制作很多东西怎么办,比如

let arr=[]
for (let i=0; i<10; i++){
arr.push('hi')
}

我很确定我不能简单地做

Buffer.(
let arr=[]
for (let i=0; i<10; i++){
arr.push('hi')
}
)

感觉就像一个 async 函数和 await 的组合,但我相信幕后一定有什么东西。

作为一个简单的示例答案,如果我想使用 Buffer 进行循环,我应该怎么做?

先感谢您。

标签: javascriptnode.js

解决方案


Buffer 是 nodejs 中的一个对象,用于保存二进制数据 - 不能保存在 UTF-8 字符串中的数据类型。这可能是视频或图像或其他二进制数据之类的东西。

它非常像 Javascript-native Uint8Array,事实上,它现在实际上是Uint8Array在幕后,尽管情况并非总是如此,因为 Buffer 在 Javascript 中可用之前可能存在于 nodejsUint8Array中。

在 Buffer 构造函数内部是一个调用Buffer.alloc(),在所有情况下都会执行 anew FastBuffer(...)FastBuffer声明如下:

class FastBuffer extends Uint8Array {}

因此,nodejs Buffer 对象是 Uint8Array 的子类,添加了一些新方法。

Buffer 与异步操作没有任何关系,除了一些异步操作(例如fs.readFile()生成 Buffer 对象作为其输出)之外,但 Buffer 本身与异步操作的时间无关。

将 Buffer 想象成一种特殊类型的数组,它使您可以字节级访问单个数据字节,但不是可以保存任何类型数据的数组元素,而是 Buffer 中的单个元素仅保存一个数据字节,因此整个 Buffer 对象包含类似于数据字节数组的东西。

当您调用的 API 生成一个 Buffer 对象,或者当您需要在字节级别或二进制值处理数据时,您将使用 Buffer 对象。

感觉就像一个 async 函数和 await 的组合,但我相信幕后一定有什么东西。

沿着这条线的某个地方,你被你看到的东西弄糊涂了。async缓冲区与or无关await。它只是一种对象类型,您可以自己创建,也可以在某些 API 返回时使用。它有一组方法和属性,如doc 中所述


推荐阅读