【nodejs】Iu002FO,Buffer,http模块,stream

2022-12-10 13:15:25 浏览数 (2)


I/O处理

关于 I/O ,有一个很经典的响水壶解释。

  • 隔壁王大爷有个水壶,王大爷经常用它来烧开水。
  • 同步阻塞:王大爷把水壶放到火上烧,然后啥也不干在那等,直到水开了王大爷再去搞别的事情。
  • 同步非阻塞:王大爷觉得自己有点憨,不打算等了。把水壶放上去之后大爷就是去看电视,时不时来瞅一眼有没有开。
  • 异步阻塞:王大爷去买了个响水壶,他把响水壶放在火上,然后也是等着水开,水开的时候水壶会发出声响。
  • 异步非阻塞:王大爷又觉得自己有点憨,他把响水壶放在火上然后去看电视,这时他不用是不是来瞅一眼,因为水开 的时候水壶会发出声音通知大爷。
  • 上面四个例子里,阻塞非阻塞说明的是大爷的状态,同步非同步说明的是水壶的调用姿势。水壶能在烧好的时候主动响起,就等同于我们异步的定义,能在结束时通知主线程并且回调。所以异步一般配合非阻塞,才能发挥其作用。

promisify

  • 使用 promisify 可以让一个回调函数风格的异步方法变成 promise 风格。
  • 利用一个自执行函数,就可以使用 async await 风格书写代码。
代码语言:javascript复制
(async () => {
  const fs = require("fs")
  // 使用 promisify 可以让一个回调函数形式的异步方法 变成 promise 形式 从而可以使用 async await
  const { promisify } = require("util")
  // 将 fs.readFile 方法 包装成 promise
  const readFile = promisify(fs.readFile)
  // 读取的是个 buffer 对象 ,是 js 用来描述二进制的东西
  const data = await readFile("./test.js")
  // toString方法解析字符串
  console.log("data", data.toString())
})()

Buffer

  • 读取数据类型为 Buffer
  • 用于在 TCP 流、文件系统操作、以及其他上下文中与八位字节流进行交互。 八位字节组成的数组,可以有效的在 JS 中存储二进制数据。
代码语言:javascript复制
// 创建一个长度为 10 字节以 0 填充的 Buffer
const buf1 = Buffer.alloc(10)
console.log('


	

0 人点赞