系统性Node.js——手写文件流( 四 )

每行代码都有详细的注释 , 直接看代码应该都能理解 , 这里我再详细罗列下具体步骤 。
「解读:」

  1. 首先初始化要被写入的内容 , 只支持 buffer 跟 字符串 , 如果是字符串则直接转为 buffer 。
  2. 计算要被写入的总长度 , 即 this.writtenLen += chunk.length
  3. 判断是否已经超过 highWaterMark
  4. 判断是否需要触发 drain
  5. 判断是否已经有正在被写入的内容了 , 如果没有则调用 _write() 直接写入 , 如果有则放入缓存中 。 当 _write() 写入完毕后 , 调用 clearBuffer() 方法 , 从 this.cache 中取出最先被缓存的内容进行写入操作 。 clearBuffer 方法如下所示
clearBuffer()clearBuffer() {// 取出缓存const data = http://kandian.youth.cn/index/this.cache.shift()if (data) {const { chunk, cb } = data// 继续进行写入操作this._write(chunk, () => {cb()this.clearBuffer()})return}// 触发 drainthis.needDrain--tt-darkmode-color: #595959;">文件可写流总结可写流要比可读流要稍微复杂一点 , 主要是要注意每次只能执行一次写入操作 , 剩下的要被缓存起来 , 所以就要有一系列的缓存控制方案 。 只要这块逻辑搞明白 , 其实跟可读流也差不多 。
最后「码字不易 , 如果觉得不错 , 就点赞/关注支持一下吧~~~」


推荐阅读