javascript - 在 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 进行循环,我应该怎么做?
先感谢您。
解决方案
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 中所述。
推荐阅读
- python - .join 函数如何与 for 循环一起工作?
- mysql - 如何在 SQL 中为一列显示一个值?
- java - 如何修复“无法将''下的属性绑定到 com.zaxxer.hikari.HikariDataSource”错误?
- flutter - 如何按后退按钮退出应用程序?
- wordpress - 如何在 woocommerce 管理订单详细信息页面中保存或更新订单项目元数据?
- ios - 无法为失败结果类型推断通用参数“T”
- javascript - 如何检查计数器值是否增加或没有反应?
- python - vscode python没有输出
- sql - 将两列信息合二为一
- kotlin-coroutines - kotlin 协程 - withContext 与 suspendCoroutine